Получение уникальных элементов из списка

Каков самый быстрый/самый эффективный способ получения всех отдельных элементов из списка?

У меня есть List<string>, который, возможно, содержит несколько повторяющихся элементов и хочет только уникальные значения в списке.

Ответ 1

Используйте HashSet<T>. Например:

var items = "A B A D A C".Split(' ');
var unique_items = new HashSet<string>(items);
foreach (string s in unique_items)
    Console.WriteLine(s);

печатает

A
B
D
C

Ответ 2

Вы можете использовать метод Distinct для возврата IEnumerable<T> отдельных элементов:

var uniqueItems = yourList.Distinct();

И если вам нужна последовательность уникальных элементов, возвращаемых как List<T>, вы можете добавить вызов ToList:

var uniqueItemsList = yourList.Distinct().ToList();

Ответ 3

Вы можете использовать Distinct метод расширения из LINQ

Ответ 4

В .Net 2.0 Я очень уверен в этом решении:

public IEnumerable<T> Distinct<T>(IEnumerable<T> source)
{
     List<T> uniques = new List<T>();
     foreach (T item in source)
     {
         if (!uniques.Contains(item)) uniques.Add(item);
     }
     return uniques;
}

Ответ 5

Помимо метода расширения Distinct LINQ, вы можете использовать объект HashSet<T>, который вы инициализируете своей коллекцией. Это, скорее всего, более эффективно, чем метод LINQ, поскольку он использует хэш-коды (GetHashCode), а не IEqualityComparer).

На самом деле, если он подходит для вашей ситуации, я бы просто использовал HashSet для хранения элементов в первую очередь.