Студопедия

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

КАТЕГОРИИ:

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






Сортировка и поиск




В классе Array реализован алгоритм быстрой сортировки (Quicksort) элементов массива. Метод Sort() требует от элементов реализации интерфейса IComparable. Простые типы, такие как System.String и System.Int32, реализуют IComparable, так что можно сортировать элементы, относящиеся к этим типам.C помощью разных вариантов метода Sort() можно отсортировать массив полностью или в заданных пределах либо отсортировать два массива, содержащих соответствующие пары " ключ-значение". После сортировки в массиве можно осуществить эффективный поиск, используя разные варианты метода BinarySearch(). int[] myArr = { 4, 5, -183, 12, 34, 0, 2, -13 }; Console.WriteLine(" Исходный массив чисел: "); foreach (int x in myArr) Console.Write(" \t{0}", x); // Реализуем сортировку массива Console.WriteLine(" \n\nОтсортированный массив: "); Array.Sort(myArr); foreach (int x in myArr) Console.Write(" \t{0}", x); // Организуем поиск числа 12 Console.WriteLine(" \n\nПоиск числа: "); int search = Array.BinarySearch(myArr, 12); Console.WriteLine(" Число 12 находится на {0} позиции", search+1); Структура ArraySegment< T>

 

Структура ArraySegment< T> представляет сегмент массива. Эта структура может применяться, когда нужно вернуть или передать методу части массива. Вместо передачи в метод массива, смещения и счетчика в отдельных параметрах, можно передать единственный параметр ArraySegment< T>. В этой структуре информация о сегменте (смещение и счетчик) заключена непосредственно в ее членах:

static void Main(string[] args) { int[] arr1 = { 1, 2, 3, 4, 5, 6 }; int[] arr2 = { 7, 8, 9, 10 }; var mySegmentsArray = new ArraySegment< int> [3] { // Инициализируем сегменты массивов new ArraySegment< int> (arr1, 0, 2), new ArraySegment< int> (arr2, 0, 1), new ArraySegment< int> (arr1, 1, 2) }; Console.WriteLine(" Сумма выбранных значений равна: \n" +SumArraySegments(mySegmentsArray)); Console.ReadLine(); } // Метод, вычисляющий сумму выбранных сегментов static int SumArraySegments(ArraySegment< int> [] value) { int sum = 0; foreach (var s in value) for (int i = s.Offset; i < s.Offset + s.Count; i++) sum += s.Array[i]; return sum; }

Важно отметить, что сегменты массива не копируют элементы исходного массива. Вместо этого через ArraySegment< T> можно получить доступ к исходному массиву. Если изменяются элементы сегмента, то эти изменения будут видны в исходном массиве.

Кортежи Массивы комбинируют объекты одного типа, а кортежи (tuple) могут комбинировать объекты различных типов. Понятие кортежей происходит из языков функционального программирования, таких как F#, где они часто используются. С появлением.NET 4 кортежи стали доступны в.NET Framework для всех языков.NET.В.NET 4 определены восемь обобщенных классов Tuple и один статический класс Tuple, который служит фабрикой кортежей. Существуют различные обобщенные классы Tuple для поддержки различного количества элементов; например, Tuple< T1> содержит один элемент, Tuple< T1, Т2> — два элемента и т.д. Элементы кортежа могут быть доступны через свойства Item1, Item2.... В случае если имеется более восьми элементов, которые нужно включить в кортеж, можно использовать определение класса Tuple с восемью параметрами. Последний параметр называется TRest, в котором должен передаваться сам кортеж. Таким образом, есть возможность создавать кортежи с любым количеством параметров.

Данная страница нарушает авторские права?


mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал