Конспект лекций (C#)-unlocked. 1 Основные сведения о C# Особенности языка
![]()
|
7.4 Некоторые универсальные типы С# Ниже рассматриваются некоторые распространённые универсальные типы С#, а также классы, в которых есть методы с параметрами типов 1 7.4.1 Класс Array Данный класс выступает в роли базового класса для всех массивов. Помимо членов класса, указанных в разделе «Массивы», класс имеет ряд статическим мето- дов, некоторые из которых являются методами с параметром типа. В таблице 7.1 приведены некоторые статические методы класса Array 1 Для многих приведённых здесь классов имеются аналоги, работающие с классом object, т.е. позволяющие одновременно хранить разнотипные элементы 109 Таблица 7.1 – Некоторые статические методы класса Array Наименование Описание Resize (ref T[] array, int newSize) Устанавливает длину массива array в значение newSize без потери существующих значений. Например: class MyClass { public int value; public MyClass(int NewValue) {value = NewValue;} } MyClass[] Mas = new MyClass[4]; Mas[0] = new MyClass(1); Mas[1] = new MyClass(2); Mas[2] = new MyClass(3); Mas[3] = new MyClass(4); // Значения {1,2,3,4} Array.Resize(ref Mas,3); // Значения {1,2,3} Array.Resize(ref Mas,5); // Значения {1,2,3,null,null} IndexOf (T[] array, T value) LastIndexOf (T[] array, T value) Производят поиск в массиве array первого/последнего эле- мента, равного value , и возвращает его позицию. Если эле- мент не найден, то возвращается -1. Если класс T создан пользователем, то в нем должен быть переопределён метод Equals . Например: class MyClass { public int value; public MyClass(int NewValue) {value = NewValue;} public override bool Equals(object obj) { if (obj is MyClass) return (obj as MyClass).value == value; else return false; } } MyClass[] Mas = new MyClass[6]; Mas[0] = new MyClass(4); Mas[1] = new MyClass(2); Mas[2] = new MyClass(6); Mas[3] = new MyClass(4); Mas[4] = new MyClass(2); Mas[5] = new MyClass(7); MyClass Find = new MyClass(2); int i1 = Array.IndexOf(Mas, Find); // i1 = 1 int i2 = Array.LastIndexOf(Mas, Find); // i2 = 4 Find = new MyClass(3); int i3 = Array.IndexOf(Mas, Find); // i3 = -1 110 Продолжение таблицы 7.1 Наименование Описание FindIndex (T[] array, Predicate FindLastIndex (T[] array, Predicate Производят поиск в массиве array первого/последнего эле- мента, удовлетворяющего условию match , и возвращает его позицию. Если элемент не найден, то возвращается -1. Для осуществления поиска должен быть реализован метод срав- нения. Например: class MyClass { public int value; public MyClass(int NewValue) {value = NewValue;} public static int V; public static bool Upper(MyClass Find) { return Find.value > V; } } MyClass[] Mas = new MyClass[6]; Mas[0] = new MyClass(4); Mas[1] = new MyClass(2); Mas[2] = new MyClass(6); Mas[3] = new MyClass(4); Mas[4] = new MyClass(2); Mas[5] = new MyClass(7); MyClass.V = 5; int i1 = Array.FindIndex(Mas, MyClass.Upper); // i1 = 2; int i2 = Array.FindLastIndex(Mas, MyClass.Upper); // i2 = 5; MyClass.V = 8; int i3 = Array.FindIndex(Mas, MyClass.Upper); // i3 = -1 Find (T[] array, Predicate FindLast (T[] array, Predicate FindAll (T[] array, Predicate Методы Find и FindLast производят поиск в массиве array первого/последнего элемента, удовлетворяющего условию match , и возвращает его. Если элемент не найден, то возвращается значение по умолчанию для типа T Метод FindAll производит поиск в массиве array всех элементов, удовлетворяющего условию match , и возвращает их в виде массива. Если элементы не найдены, то возвраща- ется пустой массив. Для осуществления поиска должен быть реализован метод сравнения. 111 Продолжение таблицы 7.1 Наименование Описание Reverse (Array array [,int index, int length]) Изменяет порядок элементов во всем одномерном массиве (или length элементов начиная с позиции index ) на обрат- ный. Например: int[] Mas = { 1, 2, 3, 4 }; Array.Reverse(Mas); // Mas = {4, 3, 2, 1} Array.Reverse(Mas, 1, 2); // Mas = {4, 2, 3, 1} Sort (T[] array) Сортирует массив array , используя для сортировки метод CompareTo() интерфейса IComparable элемента мас- сива. Если класс T создан пользователем, то в нем должен быть реализован данный интерфейс. Например: class MyClass : IComparable { public int value; public MyClass(int NewValue) {value = NewValue;} public int CompareTo(MyClass other) { return value - other.value; } } MyClass[] Mas = new MyClass[6]; Mas[0] = new MyClass(4); Mas[1] = new MyClass(2); Mas[2] = new MyClass(6); Mas[3] = new MyClass(4); Mas[4] = new MyClass(2); Mas[5] = new MyClass(7); Array.Sort(Mas); // Mas = {2, 2, 4, 4, 6, 7} 112 Продолжение таблицы 7.1 Наименование Описание Sort (T[] array, IComparer Сортирует массив array , используя для сортировки объект comparer некоторого класса, реализующего интерфейс IComparer . Например: class MyClass { public int value; public MyClass(int NewValue) {value = NewValue;} } class ReverseCompare : IComparer { public int Compare(MyClass x, MyClass y) { return y.value - x.value; } } MyClass[] Mas = new MyClass[6]; Mas[0] = new MyClass(4); Mas[1] = new MyClass(2); Mas[2] = new MyClass(6); Mas[3] = new MyClass(4); Mas[4] = new MyClass(2); Mas[5] = new MyClass(7); ReverseCompare Comparer = new ReverseCompare(); Array.Sort(Mas, Comparer); // Mas = {7, 6, 4, 4, 2, 2} 7.4.2 Класс List Представляет строго типизированный список объектов, доступных по индек- су. Поддерживает методы для поиска по списку, выполнения сортировки и других операций со списками. Некоторые члены класса приведены в таблице 7.2. Таблица 7.2 – Некоторые члены класса List Наименование Описание Capacity Возвращает или задаёт общее число элементов, которые мо- жет вместить внутренняя структура данных без изменения размера. 113 Продолжение таблицы 7.2 Наименование Описание Count Возвращает количество элементов, уже находящихся в спис- ке. Например: List [int index] Возвращает или задаёт элемент по указанному индексу. Например: List Add (T item) Добавляет элемент в конец списка. Например: List Insert (int index, T item) Вставляет элемент item в позицию index . Значение index должно быть в диапазоне от 0 до Count . Например: List RemoveAt (int index) Удаляет элемент из позиции index . Значение index должно быть в диапазоне от 0 до Count-1 . Например: List Clear() Удаляет все элементы из списка. Например List Remove (T item) Удаляет первое вхождение элемента item . Возвращает true , если элемент был удалён (иначе false ). Например: List 114 Продолжение таблицы 7.2 Наименование Описание RemoveAll (Predicate Удаляет все элементы, удовлетворяющие условию match Для осуществления удаления должен быть реализован метод сравнения. Возвращает количество удалённых элементов. Например: class MyClass { public int value; public MyClass(int NewValue) {value = NewValue;} public static int V; public static bool Upper(MyClass Find) { return Find.value > V; } } List MyClass.V = 4; l.RemoveAll(MyClass.Upper); // l = {4, 2, 2} RemoveRange (int index, int count) Удаляет count элементов из списка начиная с позиции index . Значения index и index+count должны быть в диа- пазоне от 0 до Count . Например: List Также имеются методы IndexOf , LastIndexOf , FindIndex , FindLastIndex , Find , FindLast , FindAll , Sort , Reverse , аналогичные методам класса Array 7.4.3 Класс LinkedList Представляет собой двусвязный список, каждый узел которого является эк- земпляром класса LinkedListNode и обладает рядом свойств, некоторые из ко- торых приведены в таблице 7.3. 115 Таблица 7.3 – Некоторые свойства класса LinkedListNode Наименование Описание List Позволяет получить доступ к списку класса LinkedList , которому принадлежит узел. Next Позволяет получить следующий (относительно данного) элемент списка класса LinkedListNode . Если данный элемент является последним, то возвращается null Previous Позволяет получить предыдущий (относительно данного) элемент списка класса LinkedListNode . Если данный элемент является первым, то возвращается null Value Возвращает значение, содержащееся в узле, класса T Некоторые члены класса LinkedList приведены в таблице 7.4. Таблица 7.4 – Некоторые члены класса LinkedList Наименование Описание Count Возвращает количество узлов в списке First Возвращает первый узел списка класса LinkedListNode , или null , если список пуст. Last Возвращает последний узел списка класса LinkedListNode , или null , если список пуст. AddLast (T value) Добавляет новый узел со значением value в конец списка и возвращает ссылку на него класса LinkedListNode Например: LinkedList AddFirst (T value) Добавляет новый узел со значением value в начало списка и возвращает ссылку на него класса LinkedListNode Например: LinkedList AddAfter (LinkedListNode T value) Добавляет новый узел со значением value после узла node и возвращает ссылку на него класса LinkedListNode . Например: LinkedList LinkedListNode 116 Продолжение таблицы 7.4 Наименование Описание AddBefore (LinkedListNode T value) Добавляет новый узел со значением value перед узлом node и возвращает ссылку на него класса LinkedListNode . Например: LinkedList LinkedListNode Clear_()Удаляет_все_элементы_из_стека_7.4.6_Классы_SortedSet_и_HashSet'>Clear_()Удаляет_все_элементы_из_очереди__118_7.4.5_Класс_Stack'>Clear() Удаляет все узлы из списка RemoveFirst() Удаляет узел в начале списка. Например: LinkedList RemoveLast() Удаляет узел в конце списка. Например: LinkedList Remove (T value) Удаляет первый узел, имеющий значение value . Если уда- ление произведено, то возвращается true (иначе false ). Например: LinkedList Find (T value) Возвращает первый узел (класса LinkedListNode ), имеющий значение value . Если узел не найден, то воз- вращается null . Например: LinkedList LinkedListNode // node = 8 (второй узел) node = l.Find(6); // node = null 117 Продолжение таблицы 7.4 Наименование Описание FindLast (T value) Возвращает последний узел (класса LinkedListNode ), имеющий значение value . Если узел не найден, то воз- вращается null . Например: LinkedList LinkedListNode // node = 8 (четвёртый узел) node = l.FindLast(6); // node = null 7.4.4 Класс Queue Представляет собой класс очереди, работающей по принципу FIFO («первый пришёл – первый ушёл»). Некоторые члены класса приведены в таблице 7.5. Таблица 7.5 – Некоторые члены класса Queue Наименование Описание Count Возвращает количество элементов в очереди Enqueue (T item) Добавляет в конец очереди новый элемент со значением item . Например: Queue Dequeue() Забирает из начала очереди элемент класса T и возвращает его. Если очередь пуста, то при выполнении операции воз- никнет исключение. Например: Queue Peek() Получает из начала очереди элемент класса T но не забира- ет его из очереди. Если очередь пуста, то при выполнении операции возникнет исключение. Например: Queue Clear() Удаляет все элементы из очереди 118 7.4.5 Класс Stack Представляет собой класс очереди, работающей по принципу LIFO («послед- ний пришёл – первый ушёл»), называемую также стеком. Некоторые члены класса приведены в таблице 7.6. Таблица 7.6 – Некоторые члены класса Stack Наименование Описание Count Возвращает количество элементов в стеке Push (T item) Добавляет в вершину стека новый элемент со значением item . Например: Stack Pop() Забирает из вершины стека элемент класса T и возвращает его. Если стек пуст, то при выполнении операции возник- нет исключение. Например: Stack Peek() Получает из вершины стека элемент класса T но не забира- ет его из стека. Если стек пуст, то при выполнении опера- ции возникнет исключение. Например: Stack Clear() Удаляет все элементы из стека 7.4.6 Классы SortedSet Представляют собой множества объектов. Множество может содержать толь- ко уникальные объекты. Отличие между классами заключается в том, что класс SortedSet упоря- доченный, а класс HashSet – неупорядоченный, но высокопроизводительный. Если класс T пользовательский, то в нем должен быть реализован интерфейс IComparable . Также во многих случаях требуется перегрузка метода Equals Некоторые члены классов приведены в таблице 7.7. 119 Таблица 7.7 – Некоторые члены классов SortedSet и HashSet 1 Наименование Описание Count Возвращает количество элементов в множестве Max Возвращает объект класса T , имеющий максимальное зна- чение. Если множество пустое, то возвращается значение по умолчанию для класса T Min Возвращает объект класса T , имеющий минимальное зна- чение. Если множество пустое, то возвращается значение по умолчанию для класса T Add (T item) Добавляет в множество новый элемент со значением item и возвращает результат добавления типа bool ( true , если добавление произведено, и false в противном случае). Например: SortedSet Clear() Удаляет все элементы из множества Contains (T item) Проверяет, входит ли элемент item во множество. Воз- вращает значение типа bool . Например: SortedSet |