2016-04-28 9 views
-1

私は文字列のリストを持っており、最初の文字に応じてピボットしたいと思います。リストを転記する方法

List<string> lst = new List<string>(); 
lst.Add("A1"); 
lst.Add("A2"); 
lst.Add("A3"); 
lst.Add("B1"); 
lst.Add("B2"); 
lst.Add("B3"); 
lst.Add("C1"); 
lst.Add("C2"); 
lst.Add("C3"); 

そして、私は何をしているのは、次のようなものです新しい行列を作成することです:

A B C 
1 1 1 
2 2 2 
3 3 3 

出力は、私はそれ以上のループをすることができ、適切なオブジェクトのいずれかのタイプにすることができます。

提案がありますか?またはリダイレクト? A、B、Cが固定されていないこと

おかげ

注、ならびにA、B、C、D、E..Zすることができます。そして、1,2,3はどんな順番でもかまいません。

おかげ

+0

これは配列ではない配列です。 '{A:[1,2,3]}、{B:[1,3,5]} 'のように、数字を各文字にリンクさせることを意味しますか? – Rhumborl

+0

すべての文字には常に3つの値しかありませんか?文字は常に昇順ですか? –

+0

"転置"とはどういう意味ですか?あなたの "新しい配列"では、実際に配列の一部が何であり、何か(もしあれば)配列の行や列のラベルだけがありますか?より具体的にしてください。いくつかの特定の入力がある場合、出力が何であるべきかの正確な説明とともに、あなたがしようとしていることを示す良い[mcve]を提供してください。 –

答えて

1

代替は、このLINQの式で検索を作成することです:

var result = lst.Select(x => new {Key = x[0], Value = x.Substring(1)}) 
    .ToLookup(x => x.Key, x => x.Value); 

することができます、それをループ:

foreach (var k in result) 
{ 
    Console.WriteLine(k.Key); 
    foreach (var val in k) 
    { 
     Console.WriteLine(" " + val); 
    } 
} 
+0

ジムありがとう、これは私のためのよりエレガントなソリューションです。 –

2

この変換はpivotないtransposeと呼ばれています。 Transposeは、x軸をy軸で切り替えるだけです。これは、あなたに必要なデータとstring[][]を与える

var pivot = lst.Select(x => new 
    { 
     Column = x[0].ToString(), 
     Value = x.Substring(1) 
    }) 
    .GroupBy(x => x.Column, (k, g) => new[] { k }.Concat(g.Select(x => x.Value)).ToArray()) 
    .ToArray(); 
関連する問題