SortedDictionary, SortedList и SortedSet – это классы коллекций, которые хранят пары ключ-значение и могут быть отсортированы на основе ключей. SortedSet – это коллекция, которая поддерживается в отсортированном порядке. SortedList – это коллекция, которая позволяет извлекать ключи и / или значения с помощью индексов. SortedDictionary не содержит индексов, но предлагает более быструю вставку и удаление несортированных данных, чем SortedList.

В этой статье рассказывается о SortedDictionary, SortedList и SortedSet, о том, чем они отличаются и как мы можем работать с ними на C #. Для работы с примерами кода, приведенными в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2019. Если у вас еще нет копии, вы можете скачать Visual Studio 2019 здесь.

Создание проекта консольного приложения .NET Core в Visual Studio

Прежде всего, давайте создадим проект консольного приложения .NET Core в Visual Studio. Предполагая, что в вашей системе установлена ​​Visual Studio 2019, выполните действия, описанные ниже, чтобы создать новый проект консольного приложения .NET Core в Visual Studio.

  1. Запустите интегрированную среду разработки Visual Studio.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «Консольное приложение (.NET Core)» из отображаемого списка шаблонов.
  4. Нажмите “Далее.
  5. В следующем окне «Настройте новый проект» укажите имя и расположение для нового проекта.
  6. Щелкните “Создать”.

Мы будем использовать этот проект для работы с SortedDictionary, SortedList и SortedSet в следующих разделах этой статьи.

Используйте класс SortedSet в C #

Класс SortedSet , относящийся к пространству имен System.Collections.Generic, представляет собой общую коллекцию объектов, присутствующих в отсортированном порядке. Он обеспечивает поддержку математических операций (пересечение, объединение и т. Д.) И представляет собой динамическую коллекцию, что означает, что размер объекта этой коллекции будет увеличиваться или уменьшаться по мере добавления и удаления элементов.

SortedSet содержит только уникальные элементы и используется для хранения данных в коллекции, которая должна быть отсортирована. По умолчанию элементы SortedSet расположены в возрастающем порядке. Класс SortedSet реализует следующие интерфейсы:

  • IReadOnlyCollection
  • IDeserializationCallBack
  • IEnumerable
  • ISet
  • ISerializable

Количество элементов, которые вы можете хранить в экземпляре SortedSet , называется его емкостью. В следующем фрагменте кода показано, как можно создать SortedSet целых чисел и сохранить в нем значения.

SortedSet<int> sortedIntegers = new SortedSet<int>();
sortedIntegers.Add(1);
sortedIntegers.Add(5);
sortedIntegers.Add(3);
sortedIntegers.Add(2);
sortedIntegers.Add(4);

В следующем фрагменте кода показано, как получить элементы SortedSet.

foreach (var x in sortedIntegers)
{
    Console.WriteLine(x);
}

Вот полный список кода для справки:

static void Main(string[] args) {
      SortedSet < int > sortedIntegers = new SortedSet < int > ();
      sortedIntegers.Add(1);
      sortedIntegers.Add(5);
      sortedIntegers.Add(3);
      sortedIntegers.Add(2);
      sortedIntegers.Add(4);

      foreach(var x in sortedIntegers) {
            Console.WriteLine(x);
      }
      Console.Read();
}

Когда вы выполняете указанную выше программу, целые числа будут отображаться в окне консоли в возрастающем порядке, как показано на рисунке 1:

отсортированные коллекции c 01 IDG

Фигура 1.

В следующем фрагменте кода показано, как можно хранить строки в SortedSet строк, а затем отображать их в окне консоли.

SortedSet<string> sortedStrings = new SortedSet<string>();
sortedStrings.Add("India");
sortedStrings.Add("USA");
sortedStrings.Add("England");
sortedStrings.Add("Australia");
sortedStrings.Add("New Zealand");
foreach (string str in sortedStrings)
{
   Console.WriteLine(str);
}

Когда вы запускаете указанную выше программу, названия стран будут отображаться в окне консоли в возрастающем порядке, как показано на рисунке 2:

отсортированные коллекции c 02 IDG

Фигура 2.

Используйте класс SortedList в C #

SortedList представляет собой коллекцию объектов, хранящихся в виде пар ключ-значение, которые отсортированы по ключам. Вы можете найти как общую, так и неуниверсальную версию SortedList. В то время как универсальная версия определена в пространстве имен System.Collections.Generic, неуниверсальная версия определяется в пространстве имен System.Collections.

Объекты в SortedList доступны по их ключам или индексам. Ключи в SortedList должны быть уникальными и не могут быть пустыми.

В то время как SortedDictionary реализован с использованием красно-черного двоичного дерева поиска, SortedList реализован с использованием двух внутренних массивов – одного массива для ключей и одного для значений. SortedList потребляет меньше памяти, чем SortedDictionary , и предлагает более быстрое индексированное извлечение ключей и значений. Однако SortedDictionary обеспечивает более быстрые операции вставки и удаления, чем SortedList, принимая O (log n) по сравнению с O (n) для SortedList.

В следующем фрагменте кода показано, как можно хранить данные в SortedList, а затем извлекать и отображать данные в окне консоли.

SortedList<int,string> authorList = new SortedList<int, string>();
authorList.Add(1, "Joydip");
authorList.Add(3, "Steve");
authorList.Add(2, "Michael");
foreach (KeyValuePair<int, string> pair in authorList)
{
    Console.WriteLine("Key: {0}tValue: {1}", pair.Key, pair.Value);
}

Когда вы выполняете указанную выше программу, вывод должен появиться в окне консоли, как показано на рисунке 3:

сортированные коллекции c 03 IDG

Рисунок 3.

Используйте класс SortedDictionary в C #

SortedDictionary представляет коллекцию KeyValuePair . Как отмечалось выше, SortedDictionary реализован в виде красно-черного дерева. В то время как вставка и удаление элементов из SortedDictionary занимает O (log n) времени, SortedList занимает O (n) времени для тех же операций. Как и SortedList, SortedDictionary сортируется на основе ключа.

В следующем фрагменте кода показано, как можно хранить элементы в SortedDictionary, а затем извлекать и отображать их в окне консоли.

SortedDictionary<int, int> keyValuePairs  = new SortedDictionary<int, int>();
keyValuePairs.Add(1, 100);
keyValuePairs.Add(5, 500);
keyValuePairs.Add(3, 300);
keyValuePairs.Add(4, 400);
keyValuePairs.Add(2, 200);
foreach (KeyValuePair<int, int> pair in keyValuePairs)
{
    Console.WriteLine("Key: {0}tValue: {1}", pair.Key, pair.Value);
}

Когда вы выполните указанную выше программу, результат должен выглядеть так, как показано на рисунке 4:

сортированные коллекции c 04 IDG

Рисунок 4.

Независимо от того, где в коллекции вы добавляете или удаляете элементы, операции вставки и удаления в SortedDictionary занимают O (log n). Добавление или удаление элементов в конце SortedList также требует O (log n) – но только в конце списка.

Если вам нужно получить доступ к элементам с помощью индекса или сразу заполнить отсортированные данные в коллекции, вы можете использовать SortedList. Если минимизация накладных расходов памяти важна и вам нужно больше операций поиска и меньше операций вставки и удаления, вы можете выбрать SortedList. SortedDictionary – хороший выбор, если вы будете добавлять несортированные данные. Это также хороший вариант, если вы планируете добавлять и удалять несортированные элементы из коллекции случайным образом, а память не является ограничением.

Как сделать больше на C #:

Авторские права © 2021 IDG Communications, Inc.


#Как #использовать #SortedDictionary #SortedList #SortedSet

Source link