2016-01-15 78 views
12

試圖想出一個LINQy的方式來做到這一點,但沒有任何東西對我來說。列表<逗號分隔字符串> =>列表<string>?

我有其中包括一個屬性,該屬性是一個用逗號分隔的阿爾法下載列表對象的List <>:

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

我想那些代碼的列表,希望在一個形式字符串列表:

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

感謝您的任何方向。

+5

像這種'lst.SelectMany(X => x.Split( '') ).Distinct()。ToList()''但有更好的CSV解析... –

+0

@AdrianoRepetti,取決於數據是否來自CSV文件。 OP沒有說字符串可以包含轉義的逗號。 – Jodrell

+0

謝謝,@AdrianoRepetti。簡單的string.split()足以解析這些用途。 –

回答

21

使用SelectMany獲取全部分割代碼並使用Distinct不重複該值。 嘗試是這樣的:

​​
+1

當然,我的壞,Ty –

+0

謝謝,@Joel。以前從未使用SelectMany()。 –

+0

@johnpaz當然你明確地要求一個'List <>',但是你也可以使用* set *或者其他東西,它們不能有重複,就像'var result = new SortedSet (lst.SelectMany(x => x.codes.Split( 「」)));'。 –

6

您需要使用Split每個字符串分割成多個字符串。然後,您需要使用SelectMany將多個序列連接成單個序列,然後您需要使用Distinct刪除重複項。

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

如果你需要一個string結果:

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

試試這個:

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(); 
相關問題