这是以前帖子中的一个跟随问题。在澄清我之前提出的问题之后,我建议我发一个新帖子,因为问题已经发生了巨大变化,这是一个很好的建议。以下是原始问题:Why doesn't this LINQ Select expression work
更新后的问题如下。我想要的是获得每个排列,其中每个新组仅由列表列表中的一个元素组成。举个例子:
List<List<int>> oldList = {{1,2},{3,4}};
List<List<int>> newList = {{1,3},{1,4},{2,3},{2,4}};
我正在寻找将oldList转换为newList的方法。挑战在于我不知道将有多少嵌套列表或每个列表中有多少项。您可以假设每个嵌套列表的长度完全相同。有任何想法吗?谢谢你的帮助。
答案 0 :(得分:1)
您可以阅读Eric Lippert关于使用LINQ计算笛卡尔积的this帖子。
这个想法是访问每个列表,使用当前的笛卡尔积集制作该列表的笛卡尔积。
这是代码:
static IEnumerable<IEnumerable<T>> CartesianProduct<T>(IEnumerable<IEnumerable<T>> sequences)
{
IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
return sequences.Aggregate(emptyProduct, (accumulator, sequence) =>
from accseq in accumulator
from item in sequence
select accseq.Concat(new[] { item }));
}
用法:
var newList = CartesianProduct(oldList);