2010-07-02 24 views
5

C# 'de bir dizeler listesi var ve LINQ kullanarak listedeki dizelerdeki benzersiz karakterlerin bir listesini oluşturmak istiyorum.C# içindeki LINQ kullanarak bir Listeyi <string> bir listeye dönüştürmek için <char>

Listeyi bir Listeye nasıl dönüştürebildiğim konusunda çalıştım, ancak LINQ'ın bundan daha ileri gitmesini sağlayamam.

aşağıdaki Ne var bugüne kadar olduğu gibi:

List<string> dictionary = new List<string>(someArray); 
List<string[]> uniqueCharacters = dictionary.ConvertAll(s => s.Split()); 

ben her kömürü karşılaştırmak, sizin LinQ sonucunu almak ve döngü içine koyun

List<char> uniqueCharacters = 
    dictionary.ConvertAll(s => s.Split()).SelectAll(t, i=>t[i][0]); 

cevap

15
Sen mesela LINQ en SelectMany yöntemini kullanabilirsiniz

:

var list = new List<string> { "Foo", "Bar" }; 

var chars = list.SelectMany(s => s.ToCharArray()); 
var distinct = chars.Distinct(); 
+0

List uniqueCharacters = dictionary.SelectMany (s => s.ToCharArray() olarak ekleyin. Distinct() .List(); Sonunda ne ile gittiğimi - teşekkürler :) – simonalexander2005

+0

Sonunda 'HashSet 'kullanma' var distinct = yeni HashSet (chars) 'soru daha serbestçe yorumlanırsa başka bir makul alternatiftir. Ayrıca bkz. Http://stackoverflow.com/questions/1388361/getting-all-unique-items-in-ac-list –

+0

'ToCharArray' çağrısı gereksizdir ve performans üzerinde küçük bir etkiye sahiptir çünkü karakterlerin kopyalanması gerekir. Kaynak dizgisi yeni diziye. Bunun yerine list.electMany (s => s) 'yi yapabilirsiniz. – LukeH

1

çizgisinde bir şeye ihtiyaç inanıyoruz char listesinde

foreach (string character in dictionary) 
     { 
      if (!(uniqueCharacters).Contains(character)) 
      { 
       uniqueCharacters.Add(character); 
      } 
     } 
+0

İyi cevabı, ama LinQ içinde her şeyi yapabilmek için umuyordum -, öğrenme deneyimi için başka bir şey – simonalexander2005

+1

Its eğer sadece Bir Sql komutu gibi DISTINCT , LinQ Query'nizi yazın ve Distinct() öğesini son –

İlgili konular