
Введение в список против Set в C #
List и Set - две из многих структур данных, поддерживаемых C #. Список - это абстрактная структура данных, которая является линейной. Он состоит из элементов, расположенных линейно. Можно добавлять элементы в список на разных позициях. Список имеет свойство с именем length (количество элементов в списке). В этой теме мы собираемся узнать о Списке против Сета.
Примечание : будьте осторожны, так как списки отличаются от массивов. Списки имеют переменный размер, т.е. элементы могут добавляться в список, в то время как массивы имеют фиксированный размер.
Set - это абстрактная структура данных. Набор имеет уникальные элементы и порядок элементов не важен. Элементы в наборе не могут быть доступны через индексы. Сами элементы являются индексами в наборе, и к конкретному элементу можно получить доступ с помощью цикла foreach.
Сравнение лицом к лицу между списком и множеством (инфографика)
Ниже приведены 5 основных отличий между списком и множеством

Ключевые отличия
Ниже приведены основные выводы:
- Список может содержать повторяющиеся элементы, в то время как набор не может, так как набор может иметь только уникальные элементы. Так что используйте set, если вы хотите уникальные элементы.
 - Элементы в списке упорядочены, в то время как порядок в наборе не важен, но зависит от реализации набора.
 - Доступ к элементам осуществляется с помощью индексов в списке, а сами элементы являются индексами в наборе. Следовательно, цикл foreach используется для доступа к элементам набора. Однако его также можно использовать для доступа к элементам списка, как показано в коде списка выше.
 
Давайте посмотрим на некоторые методы интерфейсов списка и набора.
Список
Ниже приведены некоторые методы, реализованные интерфейсом IList:
- int Add (element) - добавить элемент в список (в конце) и вернуть значение, указывающее на успешную вставку.
 - void Insert (int, element) - вставить элемент в заданную позицию в списке
 - void Clear () - удалить все элементы из списка
 - bool Contains (element) - проверить, присутствует ли элемент в списке
 - void Remove (element) - удалить данный элемент из списка
 - void RemoveAt (int) - удалить элемент в заданной позиции
 - int IndexOf (element) - вернуть позицию элемента
 - this (int) - это индексатор, который разрешает доступ к элементу в заданной позиции
 
Ниже приведен пример кода для списка:
// C# Program to remove the element at // the specified index of the List using System; using System.Collections.Generic; 
class StaticList (
// Main Method public static void Main(String() args)
(
// Creating an List of Integers
List firstlist = new List();
// Adding elements to List firstlist.Add(17); firstlist.Add(19); firstlist.Add(21); firstlist.Add(9); firstlist.Add(75); firstlist.Add(19); firstlist.Add(73);
Console.WriteLine("Elements Present in the List:");
// Displaying the elements of List for(int k=0;k (
Console.Write(firstlist(k)+" ");
)
Console.WriteLine(" ");
// removing the element at index 3
Console.WriteLine("Removing the element at index 3");
// 9 will be removed from the List // and 75 will come at index 3 firstlist.RemoveAt(3);
// Displaying the elements of List foreach(int k in firstlist)
(
Console.Write(k+" ");
)
)
)// C# Program to remove the element at // the specified index of the List using System; using System.Collections.Generic;
class StaticList (
// Main Method public static void Main(String() args)
(
// Creating an List of Integers
List firstlist = new List();
// Adding elements to List firstlist.Add(17); firstlist.Add(19); firstlist.Add(21); firstlist.Add(9); firstlist.Add(75); firstlist.Add(19); firstlist.Add(73);
Console.WriteLine("Elements Present in the List:");
// Displaying the elements of List for(int k=0;k (
Console.Write(firstlist(k)+" ");
)
Console.WriteLine(" ");
// removing the element at index 3
Console.WriteLine("Removing the element at index 3");
// 9 will be removed from the List // and 75 will come at index 3 firstlist.RemoveAt(3);
// Displaying the elements of List foreach(int k in firstlist)
(
Console.Write(k+" ");
)
)
)
Выход:

Устанавливать
Ниже приведены некоторые методы, реализованные интерфейсом ISet:
- bool Add (element) - возвращает true, если элемент добавлен в набор при условии, что его нет в наборе, иначе возвращается false
 - bool Contains (element) - возвращает true, если элемент уже присутствует в наборе, иначе возвращает false
 - bool Remove (element) - возвращает true, если элемент существует в наборе и может быть удален, иначе возвращает false
 - void Clear () - удалить все элементы из набора
 - void IntersectWith (Set other) - находит пересечение 2 наборов (тех элементов, которые встречаются в обоих наборах), набора, для которого вызывается метод, и другого набора, который передается в качестве параметра.
 - void UnionWith (Set other) - находит объединение из 2 наборов (все элементы в обоих наборах), набора, для которого вызывается метод, и другого набора, который передается в качестве параметра.
 - bool IsSubsetOf (Set other) - возвращает true, если набор (для которого вызывается метод) является подмножеством другого набора, переданного в качестве параметра, иначе возвращает false
 - bool IsSupersetOf (Set other) - возвращает true, если набор (для которого вызывается метод) является надмножеством другого набора, переданного в качестве параметра, иначе возвращает false
 - int Count - возвращает количество элементов в наборе
 
Ниже приведен пример кода для набора:
using System;
using System.Collections.Generic;
class HS (
// Driver code
public static void Main()
(
// Creating a HashSet of odd numbers
HashSet odd = new HashSet();
// Inserting elements in HashSet for (int i = 0; i < 5; i++) ( odd.Add(2 * i + 1);
)
Console.WriteLine("Elements in the HashSet:"); // Displaying the elements in the HashSet
foreach(int i in odd)
(
Console.Write(i+" ");
)
Console.WriteLine("\nTotal elements in the HashSet = "+odd.Count);
Console.WriteLine("Is it possible to remove 7? : "+odd.Remove(7));
Console.WriteLine("New HashSet = ");
foreach(int i in odd)
(
Console.Write(i+" ");
)
)
)
Выход:

Сравнительная таблица между списком и множеством
Следующая таблица иллюстрирует разницу между списком и множеством:
| Список | Устанавливать | 
| 1. Может содержать повторяющиеся элементы | 1. Элементы должны быть уникальными | 
| 2. Порядок элементов важен | 2. Порядок элементов не важен, но зависит от реализации | 
| 3. Элементы доступны с помощью индекса | 3. Сами элементы являются показателями | 
| 4. Интерфейс, используемый для реализации списка, - System.Collections.IList | 4. Интерфейс, используемый для реализации набора: System.Collections.ISet | 
| 5. Список реализован в виде статического списка (с использованием массива) и динамического списка (связанный список) | 5. Наборы реализованы в виде хэш-набора (hashtable) и отсортированного набора (на основе красно-черного дерева) | 
Рекомендуемые статьи
Это руководство к списку против набора. Здесь мы обсудили ключевые различия между списком и множеством с помощью инфографики и таблицы сравнения. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -
- Список C # против массива
 - C # Array vs List
 - Функции C #
 - Команды C #