我有以下元素(可能超过两个):
new[] { new[] { "A" }, new[] { "B", "C" } }
new[] { new[] { "D" }, new[] { "E", "F" } }
我想将它们分组如下:
“A”,“D”
“B”,“C”,“E”,“F”
什么是最佳方式(或至少是一种好方法)?
是否有可能以某种方式存储第一对“D”(以及第二对E“和”F“)在开头不在同一个数组中?
答案 0 :(得分:1)
我昨天碰到了这个。不是最具可读性,但它实现了目标。
new [] {
new[] { new[] { "A" }, new[] { "B", "C" } },
new[] { new[] { "D" }, new[] { "E", "F" } }
}.SelectMany((x, arrayPos) => x.Select((y, itemPos) => new { y, arrayPos, itemPos }))
.GroupBy(x => new { x.itemPos })
.Select(x => x.SelectMany(y => y.y.Select(z => new { z, y.arrayPos })))
arrayPos值将指示原始位置。
答案 1 :(得分:1)
假设你在集合中有两个:
var collections = new[]
{
new[] { new[] { "A" }, new[] { "B", "C" } },
new[] { new[] { "D" }, new[] { "E", "F" } }
};
var result = from first in collections
from second in first.Select((x, i) => new {x, i})
from third in second.x
group third by second.i;
结果为IEnumerable<IGrouping<int, string>>
,这意味着每个成员都是string
的集合,其中还有int
个密钥。请注意,结果可能未排序,因此1的组可能首先出现。如果您不想这样,请将orderby
添加到查询的末尾。