2009-09-16 24 views
17

私はネット上でこれを調べましたが、私は何かを逃していないことを確認するためにこれを求めています。 C#でHashSetをリストに変換する組み込み関数はありますか?私は要素の重複を避ける必要がありますが、私はリストを返す必要があります。ここでC#ハッシュセットからリストへの変換

答えて

48

は、私はそれを行うだろう方法は次のとおりです。

using System.Linq; 
    HashSet<int> hset = new HashSet<int>(); 
    hset.Add(10); 
    List<int> hList= hset.ToList(); 

HashSetのは、定義上、何の重複を含みません。したがって、Distinctの必要はありません。

+0

私が注文したリストを持っていると私は( orderedList.Distinctをすれば).ToList()はorderedListの中でその注文を保持しているかどうか教えてくれますか?それは、それが常に重複要素の最初の出現を保持し、後の出現を取り除くことを保証すれば、私の目的を果たします(関連性によって順序付けられたリストがあります...より関連性の高いものを保持する必要があります) – atlantis

+0

@Ngu thereとにかく重複がないので、HashSetでDistinct()を使用する点はありません –

+0

はい、注文は保持されます。 – Graviton

5

これにはLinq拡張メソッドToList<T>()があります(HashSet<T>で実装されているIEnumerable<T>で定義されています)。

ちょうどあなたが明らかにHashSetあなたは何の重複を持っていないことを確認しますが、この機能は、あなたがIList<T>としてそれを返すことができます認識しているとして、あなたはusing System.Linq;

であることを確認してください。

12

二同等のオプション:

HashSet<string> stringSet = new HashSet<string> { "a", "b", "c" }; 
// LINQ's ToList extension method 
List<string> stringList1 = stringSet.ToList(); 
// Or just a constructor 
List<string> stringList2 = new List<string>(stringSet); 

個人的に私はToListを呼び出す好むだろう、それはあなたがリストの種類を修正再表示する必要はないことを意味しています。私の以前の考えに

反して、両方の方法は、共分散を簡単にC#で表現することを可能にする4:、これに関連し

HashSet<Banana> bananas = new HashSet<Banana>();   
    List<Fruit> fruit1 = bananas.ToList<Fruit>(); 
    List<Fruit> fruit2 = new List<Fruit>(bananas); 
5
List<ListItemType> = new List<ListItemType>(hashSetCollection);