Получение уникальных элементов из списка [дубликат]
этот вопрос уже есть ответ здесь:
- удалить дубликаты из списка в C# 23 ответов
каков самый быстрый / самый эффективный способ получения всех отдельных элементов из списка?
У меня есть List<string>
что, возможно, имеет несколько повторяющихся элементов в нем и только уникальные значения в пределах список.
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 метод расширения из 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
для хранения предметов в первую очередь.