C# SortedList
В C# SortedList — это коллекция, которая автоматически сортируется по ключу. Она хранит данные в виде пар ключ-значение и автоматически сортирует по порядку ключей (по возрастанию) при добавлении или обновлении.
Класс SortedList представляет коллекцию пар ключ/значение, отсортированных по ключу.key => valueЭти пары ключ/значение можно получить по ключу и по индексу.
Упорядоченный список — это комбинация массива и хеш-таблицы. Он содержит список элементов, доступ к которым можно получить с помощью ключа или индекса. Если доступ к элементам осуществляется по индексу, это динамический массив (ArrayList); если доступ к элементам осуществляется по ключу, это хеш-таблица (Hashtable). Элементы в коллекции всегда отсортированы по значению ключа.
SortedList имеет две версии:
- необобщённая
SortedList(System.Collections.SortedList) - Обобщения
SortedList<TKey, TValue>(System.Collections.Generic.SortedList<TKey, TValue>)
Возможности:
- Автоматическая сортировка: все ключи сортируются по возрастанию; нет необходимости вручную вызывать метод сортировки.
- Хранение пар ключ-значение: каждый ключ уникален; связанное с ним значение может повторяться.
- Динамическое изменение ёмкости: автоматически изменяет размер внутреннего хранилища по мере необходимости.
- Доступ по индексуДоступ к данным по ключу или индексу.
- Эффективные операции: средняя временная сложность извлечения, вставки и удаления — O(log n).
Методы и свойства класса SortedList
В таблице ниже перечисленыSortedListНекоторые распространённые способы использования классаСвойство:
| Имя атрибута | Type | Описание |
|---|---|---|
Count | int | Получает количество пар ключ-значение в отсортированном списке. |
Capacity | int | Получает или задаёт емкость отсортированного списка. |
Comparer | IComparerилиIComparer<TKey> | Получает компаратор, используемый для сортировки ключей. |
IsReadOnly | bool | Указывает, является ли отсортированный список доступным только для чтения. |
IsFixedSize | bool | Указывает, имеет ли отсортированный список фиксированный размер (всегдаfalse)。 |
Keys | ICollectionилиIList<TKey> | Получает все ключи в отсортированном списке. |
Values | ICollectionилиIList<TValue> | Получает все значения в отсортированном списке. |
В таблице ниже перечисленыSortedListНекоторые распространённые способы использования классаМетоды:
| Название метода | Тип возвращаемого значения | Описание |
|---|---|---|
| Добавление и удаление | ||
Add(TKey key, TValue value) | void | Добавляет указанную пару ключ/значение в отсортированный список. |
Remove(TKey key) | bool | Удаляет элемент с указанным ключом из отсортированного списка. |
RemoveAt(int index) | void | Удаляет пару ключ/значение по указанному индексу в отсортированном списке. |
Clear() | void | Удаляет все элементы из отсортированного списка. |
| Поиск и доступ | ||
ContainsKey(TKey key) | bool | Определяет, содержит ли отсортированный список указанный ключ. |
ContainsValue(TValue value) | bool | Определяет, содержит ли отсортированный список указанное значение. |
IndexOfKey(TKey key) | int | Возвращает индекс указанного ключа. |
IndexOfValue(TValue value) | int | Возвращает индекс указанного значения. |
TryGetValue(TKey key, out TValue value) | bool | Получает значение, связанное с указанным ключом, и возвращает его, если оно существует.true。 |
| Копирование и перечисление | ||
CopyTo(Array array, int index) | void | Копирует элементы отсортированного списка в массив, начиная с указанного индекса. |
GetEnumerator() | IEnumerator | Возвращает перечислитель, используемый для перебора элементов в отсортированном списке. |
Пример
В следующем примере демонстрируется концепция SortedList.
Операции неуниверсальной версии:
Пример
using System.Collections;
namespace CollectionsApplication
{
class Program
{
static void Main(string[] args)
{
SortedList sl = new SortedList();
sl.Add("001", "Zara Ali");
sl.Add("002", "Abida Rehman");
sl.Add("003", "Joe Holzner");
sl.Add("004", "Mausam Benazir Nur");
sl.Add("005", "M. Amlan");
sl.Add("006", "M. Arif");
sl.Add("007", "Ritesh Saikia");
if (sl.ContainsValue("Nuha Ali"))
{
Console.WriteLine("Это имя студента уже есть в списке");
}
else
{
sl.Add("008", "Nuha Ali");
}
// Получить коллекцию ключей
ICollection key = sl.Keys;
foreach (string k in key)
{
Console.WriteLine(k + ": " + sl[k]);
}
}
}
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
001: Zara Ali 002: Abida Rehman 003: Joe Holzner 004: Mausam Banazir Nur 005: M. Amlan 006: M. Arif 007: Ritesh Saikia 008: Nuha Ali
Обобщённая версия:
Пример
using System.Collections.Generic;
class Program
{
static void Main()
{
// Создать обобщённый SortedList
SortedList<int, string> sortedList = new SortedList<int, string>();
// Добавить пару ключ-значение
sortedList.Add(2, "Banana");
sortedList.Add(1, "Apple");
sortedList.Add(3, "Cherry");
// Автоматическая сортировка по ключу
Console.WriteLine("Содержимое SortedList:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Ключ: {kvp.Key}, Значение: {kvp.Value}");
}
// Поиск и доступ
Console.WriteLine($"\nЗначение для ключа 2: {sortedList[2]}"); // Вывод: Banana
// Удалить элементы
sortedList.Remove(1);
Console.WriteLine("\nПосле удаления ключа 1:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Ключ: {kvp.Key}, Значение: {kvp.Value}");
}
// Проверить ключ и значение
Console.WriteLine($"\nСодержит ключ 3: {sortedList.ContainsKey(3)}"); // Вывод: True
Console.WriteLine($"Содержит значение 'Apple': {sortedList.ContainsValue("Apple")}"); // Вывод: False
}
}