リストからすべての個別のアイテムを取得する最も高速で効率的な方法は何ですか?
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
LINQの Distinct 拡張メソッドを使用できます
.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;
}
LINQのDistinct
拡張メソッドとは別に、コレクションで初期化する HashSet<T>
オブジェクトを使用できます。これは、おそらくGetHashCode
)ではなくハッシュコード(IEqualityComparer
)を使用するため、LINQの方法よりも効率的です。
実際、あなたの状況に適している場合は、最初にアイテムを保存するためにHashSet
を使用します。