Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Массивы и класс System.Array






Класс System.Array является базовым классом для любого массива. Любой массив реализует интерфейсы IList и IList< T>, причём IList реализован явно (так как методы Add() и Remove() генерируют исключение в случае коллекции фиксированной длины, которой является массив). В табл. 6 описаны экземплярные элементы любого массива, а табл. 7 содержит статические методы класса Array.

Таблица 6

Экземплярные элементы массива

Имя элемента Описание
Rank Свойство для чтения, возвращает размерность массива
Length Свойство для чтения, возвращает общее число элементов массива
LongLength Свойство для чтения, число элементов. Имеет тип long
CopyTo() Метод копирует фрагмент массива в другой массив
GetLength() Метод возвращает число элементов в указанном измерении
GetLowerBound() Метод возвращает нижнюю границу для указанного измерения
GetUpperBound() Метод возвращает верхнюю границу для указанного измерения
GetValue() Метод возвращает значение элемента с указанными индексами
SetValue() Метод устанавливает значение элемента с указанными индексами

Таблица 7

Статические методы класса System.Array

Имя метода Описание
Sort() Сортирует массив, переданный в качестве аргумента (возможно, с применением собственного объекта для сравнения элементов)
BinarySearch() Поиска элемента в отсортированном массиве
IndexOf() Возвращает индекс первого вхождения своего аргумента в одномерный массив (фрагмент массива) или –1, если элемента в массиве нет
LastIndexOf() Возвращает индекс последнего вхождения аргумента в одномерный массив (фрагмент массива) или –1, если элемента в массиве нет
Exists() Определяет, содержит ли массив хотя бы один элемент, удовлетворяющий предикату, который задан аргументом метода
Find() Возвращает первый элемент, удовлетворяющий предикату, который задан аргументом метода
FindLast() Возвращает первый элемент с конца массива, удовлетворяющий предикату, который задан аргументом метода
FindAll() Возвращает все элементы, удовлетворяющие предикату, который задан аргументом метода
FindIndex() Возвращает индекс первого вхождения элемента, удовлетворяющего предикату, заданному как аргумент метода
FindLastIndex() Возвращает индекс последнего вхождения элемента, удовлетворяющего предикату, заданному как аргумент метода
ConvertAll() Конвертирует массив одного типа в массив другого типа
ForEach() Выполняет указанное действие для всех элементов массива
TrueForAll() Возвращает true, если заданный предикат верен для всех элементов
Clear() Устанавливает для массива или его части значение по умолчанию для типа элементов
Reverse() Меняет порядок элементов в одномерном массиве или его части на противоположный
AsReadOnly() Создаёт на основе массива коллекцию, не допускающую модификации своих элементов (read-only collection)
CreateInstance() Создаёт экземпляр массива любого типа, размерности и длины
Copy() Копирует раздел одного массива в другой массив, выполняя приведение типов
ConstrainedCopy() Метод подобен Copy(), но если приведение типов для элементов неудачно, выполняется отмена операции копирования
Resize() Позволяет изменить размер массива

Рассмотрим несколько примеров использования методов массива. В первом примере создадим массив и выполним работу с его элементами, не применяя традиционный синтаксис C#.

Array a = Array.CreateInstance(typeof (string), 2); // тип, длина

a.SetValue(" hi", 0); // a[0] = " hi";

a.SetValue(" there", 1); // a[1] = " there";

string s = (string) a.GetValue(0); // s = a[0];

Метод CreateInstance() может создать массив любой размерности с указанным диапазоном изменения индексов:

// b – это массив int[-5..4, 100..119]

var b = Array.CreateInstance(typeof (int), // тип элемента

new[] {10, 20}, // длины размерностей

new[] {-5, 100}); // нижние границы

b.SetValue(25, -3, 110);

int x = (int) b.GetValue(-2, 115);

Группа статических методов класса Array позволяет выполнить сортировку и поиск данных в массиве. Методы поиска могут использовать заданные предикаты, а сортировка – выполняться по заданному критерию сравнения.

int[] a = {10, 3, 5, -7, 0, 20, 10, 4}; // исходный массив

int b = Array.Find(a, x => x > 6); // поиск элемента по предикату

int[] c = Array.FindAll(a, x => x > 6); // поиск всех элементов

Array.ForEach(c, Console.WriteLine); // действие над элементами

bool flag = Array.TrueForAll(a, x => x > 0); // проверка условия

Array.Sort(a, (x, y) => x == y? 0: x > y? -1: 1); // сортировка

int pos = Array.BinarySearch(a, 3); // двоичный поиск

Массивы допускают копирование элементов и изменение размера:

int[] a = {10, 3, 5, -7, 0, 20, 10, 4};

int[] b = new int[a.Length];

long[] c = new long[a.Length];

a.CopyTo(b, 0);

Array.Copy(a, c, a.Length);

Array.Resize(ref a, 40);

Заметим, что для быстрого копирования массивов с элементами типа значений можно использовать класс System.Buffer. Он оперирует байтами данных.

int[] a = {10, 3, 5, -7, 0, 20, 10, 4};

int[] b = new int[a.Length];

Buffer.BlockCopy(a, 3, b, 5, 10); // смещение задано в байтах






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.