2009-05-26 15 views
0

私は配列の質問

可能ということがいかに
List<List<string>> listStringArray = new List<List<string>>(); 

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

以下のように変換する必要が

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

以下の配列を持っていますか?

+1

この変換がしたいことに従わない...入力はどのように出力に関連していますか? –

+1

私は、入力文字列の最初の数字(つまり、 "1,3"と "1,4"が同じバケットに入れられる)で出力をグループ化したいと思っています。 – mquander

+0

ああ、そうです"1,1"で始まる入力データのタイプミス –

答えて

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

このような短縮形はありません。ループに入り、各配列を分割してリストに追加する必要があります。

+4

はい、あります。 – mquander

+0

偉大で強力なLINQを入力してください! :P – jrista

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