2016-01-15 23 views
12

bunu yapmanın bir LINQy yolu ile gelip çalışıyorum, ama hiçbir şey bana geliyor. umut verici bir biçimde şeklinde, O kodları listesini istiyorumlistesi <virgülle ayrılmış dizeleri>?

lst[0].codes = "AA,BB,DD" 
lst[1].codes = "AA,DD,EE" 
lst[2].codes = "GG,JJ" 

:

, alfa kodlarının virgülle ayrılmış listesi olan bir özellik içerir nesnelerin bir listesi <> sahip dizeleri listesi: herhangi bir yöne için

result = AA,BB,DD,EE,GG,JJ 

teşekkürler.

+5

'lst.SelectMany (x => x.Split ('')) .Distinct(). ToList() 'ancak veri CSV dosyasından ise daha iyi bir CSV ayrıştırma ... –

+0

@AdrianoRepetti ile oldukça bağlıdır. OP'nin söylediği dizeler kaçmış virgül içerebilir. – Jodrell

+0

Teşekkürler, @AdrianoRepetti. Basit string.split(), bu amaçlar için yeterli ayrıştırmadır. –

cevap

21

Kullanım SelectMany tüm bölünmüş kodlarını almak ve değerleri tekrarlamayın için Distinct kullanmak. Böyle bir şey deneyin :

var result = lst.SelectMany(x => x.codes.Split(",")).Distinct().ToList(); 
+1

Tabii, benim kötü Ty –

+0

Teşekkür kendisine hatırlatmak kendimi daha iyi hissediyorum. Daha önce hiç SelectMany() kullanmayın. Tabii –

+0

@johnpaz açıkça bir 'List <>' istedi, ama aynı zamanda var result 'deki gibi tekrarlar olamaz a * set * falan, kullanabilirsiniz = new SortedSet (lst.SelectMany (x => x.codes.Split (""))); '. –

6

Birden dizeleri içine her dize bölmek Split kullanmak gerekir. Daha sonra, tek bir dizi halinde çok sayıda dizileri bağlamak için SelectMany kullanmak gerekir ve daha sonra çiftleri kaldırmak Distinct kullanmak gerekir.

var result = 
    lst 
    .SelectMany(x => x.codes.Split(',')) 
    .Distinct() 
    .ToList(); 
0

sonuç olarak bir string gerekirse:

string result = string.Join(",",lst.SelectMany(p=>p.codes.Split(",")).Distinct()); 
-1

bu deneyin: Bunun gibi

List<string> list = new List<string>(); 

    char[] sep = new char[1]; 
    sep[0] = ','; 
    foreach (string item in lst) 
    { 
     list.AddRange(item.Split(sep)); 
    } 

    list = list.Distinct().ToList(); 
İlgili konular