2009-05-26 65 views
0

我有以下數組問題

string stringArray = new stringArray[12]; 

stringArray[0] = "0,1"; 
stringArray[1] = "1,3"; 
stringArray[2] = "1,4"; 
stringArray[3] = "2,1"; 
stringArray[4] = "2,4"; 
stringArray[5] = "3,7"; 
stringArray[6] = "4,3"; 
stringArray[7] = "4,2"; 
stringArray[8] = "4,8"; 
stringArray[9] = "5,5"; 
stringArray[10] = "5,6"; 
stringArray[11] = "6,2"; 

我需要一個像下面

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

listStringArray[["1"],["3","4"],["1","4"],["7"],["3","2","8"],["5","6"],["2"]]; 

變換數組這怎麼可能?

+1

我沒有按照你希望這個轉換做什麼......輸入如何與輸出相關? – 2009-05-26 15:44:35

+1

我很確定他希望輸出字符串中的第一個數字將輸出分組在一起(即將「1,3」和「1,4」放入同一個桶中)。 – mquander 2009-05-26 15:46:26

回答

10

我想你真正想要的大概是這樣的:

var indexGroups = x.Select(s => s.Split(',')).GroupBy(s => s[0], s => s[1]); 

這將返回元素爲分組枚舉。

要返回一個列表的列表,這是你從字面上要求,然後嘗試:

var lists = x.Select(s => s.Split(',')).GroupBy(s => s[0], s => s[1]) 
      .Select(g => g.ToList()).ToList(); 
0

沒有這樣的簡寫。你將不得不闖入循環並拆分每個數組並添加到列表中。

0

非LINQ版本(我必須承認,它更噁心,但你可能沒有選擇)

 var index = new Dictionary<string, List<string>>(); 
     foreach (var str in stringArray) { 
      string[] split = str.Split(','); 
      List<string> items; 
      if (!index.TryGetValue(split[0], out items)) { 
       items = new List<string>(); 
       index[split[0]] = items; 
      } 
      items.Add(split[1]); 
     } 

     var transformed = new List<List<string>>(); 
     foreach (List<string> list in index.Values) { 
      transformed.Add(list); 
     }