我有字符串列表,我想根据第一个字母来调整它。
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 :(得分:2)
此转化称为pivot
而不是transpose
。移调只需用y轴切换x轴。
这会为您提供包含所需数据的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();
答案 1 :(得分:1)
另一种方法是使用此LINQ表达式创建Lookup:
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);
}
}