2009-09-16 45 views
17

Bunu internetten araştırdım ama bir şeyleri kaçırmadığımdan emin olmak için bunu soruyorum. HashSets C# listelerinde listeleri dönüştürmek için yerleşik bir işlev var mı? Birden fazla elemandan kaçınmam gerekiyor ama bir Listeyi geri vermem gerekiyor. İşteC# Listelemelere hashtag dönüştürme

cevap

48

bunu yapmak gibi olacaktır:

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

HashSet tanımı gereği, hiçbir çiftleri içeren. Yani Distinct'a gerek yoktur.

+0

ben sıralı bir listesini var ve ( orderedList.Distinct yaparsanız) .List() orderList'te siparişi koruyup sakladığını söyler misiniz? Eğer yinelenen elemanın ilk oluşumunu her zaman muhafaza etmeyi ve daha sonra ortaya çıkmasını engellerse, amaca hizmet eder. (İlgilendiğim sıradaki listeye sahibim ... daha çok ilgili olana ihtiyacım var) – atlantis

+0

@Ngu bir HashSet üzerinde Distinct() kullanarak hiçbir noktaya gerek yok zaten yinelenen yinelenen yok –

+0

Evet, sipariş korunur. – Graviton

5

Bunu yapacak Linq uzantısı yöntemi ToList<T>() (HashSet<T> tarafından uygulanan IEnumerable<T> üzerinde tanımlanır). Belli ki bildiğiniz gibi

Sadece HashSet hiçbir çiftleri var sağlayacaktır size

using System.Linq; olduğundan emin olun ve bu fonksiyon bir IList<T> zamanda geri sağlayacaktır.

12

İki eşdeğer seçenekleri:

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); 

Şahsen ben ToList çağıran tercih ediyorum o listenin türünü yeniden ifade gerekmez demektir. Benim daha önceki düşüncelere

aksine, çift yönlü kovaryans kolayca C# ifade edilmesine izin 4: Bu İlişkin

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);