109

リストからすべての個別のアイテムを取得するための最速/最も効率的な方法は何ですか?

複数の繰り返しアイテムが含まれてList<string>いる可能性があり、リスト内の一意の値のみが必要です。

4

5 に答える 5

172

このメソッドを使用して、個別のアイテムDistinctを返すことができます。IEnumerable<T>

var uniqueItems = yourList.Distinct();

また、として返される一意のアイテムのシーケンスが必要な場合はList<T>、次の呼び出しを追加できますToList

var uniqueItemsList = yourList.Distinct().ToList();
于 2009-09-07T09:10:01.830 に答える
160

を使用し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);

版画

あ
B
D
ハ
于 2009-09-07T09:10:54.433 に答える
7

LINQ からDistinct拡張メソッドを使用できます

于 2009-09-07T09:10:24.367 に答える
5

.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;
}
于 2010-12-11T13:41:01.533 に答える
4

DistinctLINQ の拡張メソッドとは別にHashSet<T>、コレクションで初期化するオブジェクトを使用できます。GetHashCodeこれは) ではなくハッシュ コード ( ) を使用するため、おそらく LINQ の方法よりも効率的ですIEqualityComparer

実際、状況に適している場合HashSetは、最初にアイテムを保管するために a を使用します。

于 2009-09-07T09:12:44.463 に答える