![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Массивы и класс System.Array
Класс System.Array является базовым классом для любого массива. Любой массив реализует интерфейсы IList и IList< T>, причём IList реализован явно (так как методы Add() и Remove() генерируют исключение в случае коллекции фиксированной длины, которой является массив). В табл. 6 описаны экземплярные элементы любого массива, а табл. 7 содержит статические методы класса Array. Таблица 6 Экземплярные элементы массива
Таблица 7 Статические методы класса System.Array
Рассмотрим несколько примеров использования методов массива. В первом примере создадим массив и выполним работу с его элементами, не применяя традиционный синтаксис 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); // смещение задано в байтах
|