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


этот вопрос уже есть ответ здесь:

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

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

5 80

5 ответов:

использовать 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

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

var uniqueItems = yourList.Distinct();

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

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

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

в .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;
}

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

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