我有以下简化的输入:
List<string[]> sList = new List<string[]>();
sList.Add(new string[]{ "Product", "ProductID"});
sList.Add(new string[] { "Fork", "1" });
sList.Add(new string[] { "Spoon", "2" });
sList.Add(new string[] { "Knife", "3" });
我想要以下输出
ResultList[0] == { "Product" ,"Fork","Spoon","Knife"};
ResultList[1] == { "ProductID" ,"1","2","3"};
首先我用2个循环解决了这个问题,然后我改变了对这种linq的处理方式(两者都起作用):
List<string[]> Result = sList.SelectMany(x => x)
.Select((x, index) => new KeyValuePair<int, string>(index % sList.First().Length, x))
.GroupBy(s => s.Key).Select(g => g.Select(x => x.Value)
.ToArray()).ToList();
它有效,但对我来说似乎有点circuit回。有没有我忽略的更简单的方法(内置的?)?
因此,如果您确定每个数组都恰好包含2个元素,那么问题就变成了两个琐碎选择的组合。但是,如果您只知道所有数组的大小都相同,而又不想依赖确切的数字,则此方法应该做到这一点:
List<string[]> Result =
sList.First()
.Select((x, i) => i)
.Select(i => sList.Select(x => x[i]).ToArray())
.ToList();
我们基本上是使用第一个项目sList
来找出数组中有多少个成员,然后为每个成员进行选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句