Ответ 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
Каков самый быстрый/самый эффективный способ получения всех отдельных элементов из списка?
У меня есть List<string>
, который, возможно, содержит несколько повторяющихся элементов и хочет только уникальные значения в списке.
Используйте 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
для хранения элементов в первую очередь.