Коллекции С#
Для многих приложений требуется создавать группы связанных объектов и управлять ими. Есть два способа группировать объекты: путем создания массивов объектов и путем создания коллекций объектов.
Массивы наиболее полезны для создания и работы с фиксированным числом строго типизированных объектов.
Коллекции обеспечивают более гибкий способ работы с группами объектов. В отличие от массивов, группа объектов, с которыми вы работаете, может динамически увеличиваться и уменьшаться по мере изменения потребностей приложения. Для некоторых коллекций можно назначить ключ любому объекту, помещенному в коллекцию, чтобы можно было быстро получить объект с помощью ключа.
Коллекция — это класс, поэтому вы должны объявить экземпляр класса, прежде чем сможете добавлять элементы в эту коллекцию.
Если ваша коллекция содержит элементы только одного типа данных, вы можете использовать один из классов в пространстве имен «System.Collections.Generic». Универсальная коллекция обеспечивает безопасность типов, поэтому в нее нельзя добавить другие типы данных. Когда вы извлекаете элемент из универсальной коллекции, вам не нужно определять его тип данных или преобразовывать его.
1. Общие коллекции
Универсальные коллекции являются предпочтительным типом для использования, если каждый элемент в коллекции имеет один и тот же тип данных. В универсальную коллекцию можно добавлять только нужные типы данных, и это обеспечивается за счет использования строгой типизации, что снижает вероятность ошибок.
Платформа .NET предоставляет ряд универсальных классов коллекций, полезных для хранения данных и управления ими. Чтобы получить доступ к универсальной коллекции в вашем коде, вам нужно будет включить оператор:
— — — — — — — — — — — — — — — — — — —
используя System.Collections.Generic;
— — — — — — — — — — — — — — — — — — —
1.1 Список‹Т›
Список похож на массив, но элементы списка можно вставлять и удалять динамически.
Класс List‹T› требует, чтобы все элементы были одного типа T.
Например:
Выход:
Список‹T› свойств и методов:
- Считать
Получает количество элементов, содержащихся в списке‹T›.
- Пункт[Int32]
Получает или задает элемент по указанному индексу.
- Емкость
Получает или задает общее количество элементов, которые может содержать внутренняя структура данных без изменения размера.
- Добавить(Т)
Добавляет объект в конец списка‹T›.
- Прозрачный()
Удаляет все элементы из списка‹T›.
- Содержит(Т)
Определяет, находится ли элемент в списке‹T›.
- RemoveAt(Int32)
Удаляет элемент с указанным индексом списка‹T›.
- Сортировать()
Сортирует элементы во всем списке‹T›, используя компаратор по умолчанию.
Вы можете проверить все свойства и методы List‹T› здесь:
— — — — — — — — — —
1.2 SortedList‹TKey, TValue›
Сортированный список — это набор пар ключ/значение, отсортированных по ключу.
Ключ можно использовать для доступа к соответствующему значению в отсортированном списке.
***Дубликаты ключей не допускаются, чтобы гарантировать, что каждая пара ключ/значение уникальна.
Класс SortedList‹TKey, TValue› требует, чтобы все пары ключ/значение были одного типа TKey, TValue.
Например:
Выход:
Свойства и методы SortedList‹TKey, TValue›:
- Count
Получает количество пар ключ/значение, содержащихся в SortedList‹TKey,TValue›. - Item[TKey]
Получает или задает значение, связанное с указанным ключом. - Keys
Получает коллекцию, содержащую ключи из списка SortedList‹TKey,TValue› в отсортированном порядке. - Values
Получает коллекцию, содержащую значения в списке SortedList‹TKey,TValue›. - Add(TKey, TValue)
Добавляет элемент с указанными ключом и значением в SortedList‹TKey,TValue›. - Clear()
Удаляет все элементы из SortedList‹TKey,TValue›. - ContainsKey(TKey)
Определяет, содержит ли SortedList‹TKey,TValue› определенный ключ. - ContainsValue(TValue)
Определяет, содержит ли список SortedList‹TKey,TValue› определенное значение. - Remove(TKey)
Удаляет элемент с указанным ключом из SortedList‹TKey,TValue›. - RemoveAt(Int32)
Удаляет элемент по указанному индексу из SortedList‹TKey,TValue›.
Вы можете проверить все свойства и методы SortedList‹TKey, TValue› здесь:
SortedList‹TKey, TValue› Класс
— — — — — — — — — —
1.3 Словарь‹TKey, TValue›
Словарь — это набор уникальных пар ключ/значение, где ключ используется для доступа к соответствующему значению.
***Дубликаты ключей не допускаются, чтобы гарантировать, что каждая пара ключ/значение уникальна.
Класс Dictionary‹TKey, TValue› требует, чтобы все пары ключ/значение были одного типа TKey, TValue.
Например:
Выход:
Свойства и методы словаря‹TKey, TValue›:
- Count
Получает количество пар ключ/значение, содержащихся в Dictionary‹TKey,TValue›. - Item[TKey]
Получает или задает значение, связанное с указанным ключом. - Keys
Получает коллекцию, содержащую ключи в Dictionary‹TKey,TValue›. - Values
Получает коллекцию, содержащую значения в Dictionary‹TKey,TValue›. - Add(TKey, TValue)
Добавляет указанные ключ и значение в словарь. - Clear()
Удаляет все ключи и значения из Словаря‹TKey,TValue›. - ContainsKey(TKey)
Определяет, содержит ли Dictionary‹TKey,TValue› указанный ключ. - ContainsValue(TValue)
Определяет, содержит ли Dictionary‹TKey,TValue› определенное значение. - Remove(TKey)
Удаляет значение с указанным ключом из Словаря‹TKey,TValue›. - Remove(TKey, TValue)
Удаляет значение с указанным ключом из Dictionary‹TKey,TValue› и копирует элемент в параметр value.
Вы можете проверить все свойства и методы Dictionary‹TKey, TValue› здесь:
— — — — — — — — — —
1.4 SortedDictionary‹TKey, TValue›
Сортированный словарь — это набор пар ключ/значение, отсортированных по ключу.
Ключ можно использовать для доступа к соответствующему значению в отсортированном словаре.
***Дубликаты ключей не допускаются, чтобы гарантировать, что каждая пара ключ/значение уникальна.
Класс SortedDictionary‹TKey, TValue› требует, чтобы все пары ключ/значение были одного типа TKey, TValue.
Например:
Выход:
Свойства и методы SortedDictionary‹TKey, TValue›:
- Count
Получает количество пар ключ/значение, содержащихся в SortedDictionary‹TKey,TValue›. - Item[TKey]
Получает или задает значение, связанное с указанным ключом. - Keys
Получает коллекцию, содержащую ключи в SortedDictionary‹TKey,TValue›. - Values
Получает коллекцию, содержащую значения в SortedDictionary‹TKey,TValue›. - Add(TKey, TValue)
Добавляет элемент с указанными ключом и значением в SortedDictionary‹TKey,TValue›. - Clear()
Удаляет все элементы из SortedDictionary‹TKey,TValue›. - ContainsKey(TKey)
Определяет, содержит ли SortedDictionary‹TKey,TValue› элемент с указанным ключом. - ContainsValue(TValue)
Определяет, содержит ли SortedDictionary‹TKey,TValue› элемент с указанным значением. - Remove(TKey)
Удаляет элемент с указанным ключом из SortedDictionary‹TKey,TValue›.
Вы можете проверить все свойства и методы SortedDictionary‹TKey, TValue› здесь:
SortedDictionary‹TKey, TValue› Класс
— — — — — — — — — —
1,5 Стек‹Т›
Стек — это набор элементов по принципу «последним пришел — первым ушел» (LIFO), где последний элемент, который входит в стек, будет первым выходящим элементом.
Вставка элемента в стек называется «Push».
Удаление элемента из стека называется «выталкиванием».
Проталкивание и выталкивание могут выполняться только в верхней части стека.
Класс Stack‹T› требует, чтобы все элементы были одного типа T.
Например:
Выход:
Свойства и методы стека‹T›:
- Count
Получает количество элементов, содержащихся в Stack‹T›. - Clear()
Удаляет все объекты из стека‹T›. - Содержит(T)
Определяет, находится ли элемент в Stack‹T›. - Peek()
Возвращает объект наверху стека‹T›, не удаляя его. - Pop()
Удаляет и возвращает объект в верхней части стека‹T›. - Push(T)
Вставляет объект в верхнюю часть стека‹T›. - ToArray()
Копирует Stack‹T› в новый массив.
Вы можете проверить все свойства и методы Stack‹T› здесь:
— — — — — — — — — —
1.6 Очередь‹T›
Очередь – это набор элементов по принципу "первым поступил – первым обслужен" (FIFO), в котором первый элемент, попадающий в очередь, также является первым выходящим элементом.
Вставка элемента в очередь называется «Enqueue».
Удаление элемента из очереди называется «удалением из очереди».
Класс Queue‹T› требует, чтобы все элементы были одного типа T.
Например:
Выход:
Свойства и методы очереди‹T›:
- Count
Получает количество элементов, содержащихся в Queue‹T›. - Clear()
Удаляет все объекты из очереди‹T›. - Содержит(T)
Определяет, находится ли элемент в Очереди‹T›. - Dequeue()
Удаляет и возвращает объект в начале очереди‹T›. - Enqueue(T)
Добавляет объект в конец очереди‹T›. - Peek()
Возвращает объект в начале очереди‹T›, не удаляя его. - ToArray()
Копирует элементы Queue‹T› в новый массив.
Вы можете проверить все свойства и методы Queue‹T› здесь:
— — — — — — — — — —
1.7 Набор хэшей‹T›
Хэш-набор — это набор уникальных значений, в котором не допускаются повторяющиеся значения.
HashSet‹T› — это динамическая коллекция, что означает, что размер HashSet автоматически увеличивается при добавлении новых элементов.
Наборы хэшей отличаются от других коллекций, потому что они представляют собой просто набор значений. У них нет индексных позиций, и элементы нельзя упорядочить.
Класс HashSet‹T› требует, чтобы все элементы были одного типа T.
Например:
Выход:
Свойства и методы HashSet‹T›:
- Count
Получает количество элементов, содержащихся в наборе. - Add(T)
Добавляет указанный элемент в набор. - Clear()
Удаляет все элементы из объекта HashSet‹T›. - Содержит(T)
Определяет, содержит ли объект HashSet‹T› указанный элемент. - Remove(T)
Удаляет указанный элемент из объекта HashSet‹T›. - IsSubsetOf(IEnumerable‹T›)
Определяет, является ли объект HashSet‹T› подмножеством указанной коллекции. - IsSupersetOf(IEnumerable‹T›)
Определяет, является ли объект HashSet‹T› надмножеством указанной коллекции. - UnionWith(IEnumerable‹T›)
Изменяет текущий объект HashSet‹T› таким образом, чтобы он содержал все элементы, присутствующие в нем самом, в указанной коллекции или в том и другом. - IntersectWith(IEnumerable‹T›)
Изменяет текущий объект HashSet‹T› таким образом, чтобы он содержал только элементы, присутствующие в этом объекте и в указанной коллекции.
Вы можете проверить все свойства и методы HashSet‹T› здесь:
— — — — — — — — — —
1.8 Сортированный набор‹T›
Сортированный набор — это набор объектов, которые поддерживаются в отсортированном порядке. Это динамическая коллекция, то есть размер SortedSet автоматически увеличивается при добавлении новых элементов.
Объект SortedSet‹T› сохраняет порядок сортировки, не влияя на производительность при вставке и удалении элементов.
*** Повторяющиеся элементы не допускаются. Изменение значений сортировки существующих элементов не поддерживается и может привести к непредвиденному поведению.
Класс SortedSet‹T› требует, чтобы все элементы были одного типа T.
Например:
Выход:
Свойства и методы SortedSet‹T›:
- Count
Получает количество элементов в наборе SortedSet‹T›. - Max
Получает максимальное значение в наборе SortedSet‹T›, определенное компаратором. - Min
Получает минимальное значение в наборе SortedSet‹T›, как определено компаратором. - Add(T)
Добавляет элемент в набор и возвращает значение, указывающее, было ли оно успешно добавлено. - Clear()
Удаляет все элементы из набора. - Содержит(T)
Определяет, содержит ли набор определенный элемент. - IntersectWith(IEnumerable‹T›)
Изменяет текущий объект SortedSet‹T› таким образом, чтобы он содержал только элементы, которые также входят в указанную коллекцию. - IsSubsetOf(IEnumerable‹T›)
Определяет, является ли объект SortedSet‹T› подмножеством указанной коллекции. - IsSupersetOf(IEnumerable‹T›)
Определяет, является ли объект SortedSet‹T› надмножеством указанной коллекции. - UnionWith(IEnumerable‹T›)
Изменяет текущий объект SortedSet‹T› таким образом, чтобы он содержал все элементы, присутствующие либо в текущем объекте, либо в указанной коллекции. - Remove(T)
Удаляет указанный элемент из SortedSet‹T›. - Reverse()
Возвращает IEnumerable‹T›, который перебирает SortedSet‹T› в обратном порядке.
Вы можете проверить все свойства и методы SortedSet‹T› здесь:
— — — — — — — — — —
1.9 Связанный список‹T›
Связанный список представляет собой линейную структуру данных, состоящую из узлов, где каждый узел содержит поле данных и ссылку (ссылку) на следующий узел в списке.
LinkedList‹T› дважды связан, каждый узел указывает вперед на «Следующий» узел и назад на «Предыдущий» узел.
Если LinkedList‹T› пуст, свойства First и Last содержат значение null.
Класс LinkedList‹T› требует, чтобы все элементы были одного типа T.
Например:
Выход:
Свойства и методы LinkedList‹T›:
- Count
Получает количество узлов, фактически содержащихся в LinkedList‹T›. - First
Получает первый узел LinkedList‹T›. - Last
Получает последний узел LinkedList‹T›. - AddFirst(T)
Добавляет новый узел, содержащий указанное значение, в начало LinkedList‹T›. - AddLast(T)
Добавляет новый узел, содержащий указанное значение, в конец LinkedList‹T›. - Clear()
Удаляет все узлы из LinkedList‹T›. - Содержит(T)
Определяет, находится ли значение в LinkedList‹T›. - Find(T)
Находит первый узел, содержащий указанное значение. - FindLast(T)
Находит последний узел, содержащий указанное значение. - Remove(T)
Удаляет первое вхождение указанного значения из LinkedList‹T›. - RemoveFirst()
Удаляет узел в начале LinkedList‹T›. - RemoveLast()
Удаляет узел в конце LinkedList‹T›.
Вы можете проверить все свойства и методы LinkedList‹T› здесь:
— — — — — — — — — —
2. Неуниверсальные коллекции
В неуниверсальных коллекциях могут храниться элементы типа «Объект». Поскольку тип данных «Объект» может относиться к любому типу данных, вы рискуете получить неожиданные результаты. Неуниверсальные коллекции также могут быть медленнее как для доступа, так и для выполнения.
Пространство имен System.Collections включает следующие необобщенные коллекции:
2.1 Список массивов
— Представляет массив объектов, размер которых динамически увеличивается по мере необходимости.
2.2 Сортированный список
— Представляет набор пар ключ/значение, отсортированных по ключам и доступных по ключу и индексу.
2.3 Стек
— Представляет набор объектов в порядке поступления (LIFO).
2.4 Очередь
— Представляет набор объектов в порядке поступления (FIFO).
2.5 Хэш-таблица
— Представляет набор пар ключ/значение, организованных на основе хэш-кода ключа.
2.6 Битовый массив
— Управляет компактным массивом битовых значений, которые представлены логическими значениями, где true указывает, что бит включен (1), а false указывает, что бит выключен (0).
Чтобы получить доступ к неуниверсальной коллекции в вашем коде, вам нужно будет включить оператор:
— — — — — — — — — — — — — — — — — —
использование System.Collections;
— — — — — — — — — — — — — — — — — —
*** Неуниверсальные коллекции подвержены ошибкам и менее производительны, рекомендуется всегда использовать «универсальные коллекции», если они доступны.
Дополнительные сведения о неуниверсальных коллекциях:
Пространство имен System.Collections
Использованная литература:
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic?view=net-6.0
https://docs.microsoft.com/en-us/dotnet/api/system.collections?view=net-6.0