C# SortedList

Коллекции C#

В C# SortedList — это коллекция, которая автоматически сортируется по ключу. Она хранит данные в виде пар ключ-значение и автоматически сортирует по порядку ключей (по возрастанию) при добавлении или обновлении.

Класс SortedList представляет коллекцию пар ключ/значение, отсортированных по ключу.key => valueЭти пары ключ/значение можно получить по ключу и по индексу.

Упорядоченный список — это комбинация массива и хеш-таблицы. Он содержит список элементов, доступ к которым можно получить с помощью ключа или индекса. Если доступ к элементам осуществляется по индексу, это динамический массив (ArrayList); если доступ к элементам осуществляется по ключу, это хеш-таблица (Hashtable). Элементы в коллекции всегда отсортированы по значению ключа.

SortedList имеет две версии:

  1. необобщённаяSortedList(System.Collections.SortedList)
  2. ОбобщенияSortedList<TKey, TValue>(System.Collections.Generic.SortedList<TKey, TValue>)

Возможности:

  • Автоматическая сортировка: все ключи сортируются по возрастанию; нет необходимости вручную вызывать метод сортировки.
  • Хранение пар ключ-значение: каждый ключ уникален; связанное с ним значение может повторяться.
  • Динамическое изменение ёмкости: автоматически изменяет размер внутреннего хранилища по мере необходимости.
  • Доступ по индексуДоступ к данным по ключу или индексу.
  • Эффективные операции: средняя временная сложность извлечения, вставки и удаления — O(log n).

Методы и свойства класса SortedList

В таблице ниже перечисленыSortedListНекоторые распространённые способы использования классаСвойство:

Имя атрибутаTypeОписание
CountintПолучает количество пар ключ-значение в отсортированном списке.
CapacityintПолучает или задаёт емкость отсортированного списка.
ComparerIComparerилиIComparer<TKey>Получает компаратор, используемый для сортировки ключей.
IsReadOnlyboolУказывает, является ли отсортированный список доступным только для чтения.
IsFixedSizeboolУказывает, имеет ли отсортированный список фиксированный размер (всегдаfalse)。
KeysICollectionилиIList<TKey>Получает все ключи в отсортированном списке.
ValuesICollectionили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;
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;
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
    }
}

Коллекции C#

Другие расширения