C# 是否可以使用linq枚举两个IEnumerable的所有置换
我可以使用循环来实现这一点,但是有没有办法获取两个IEnumerable,枚举所有可能的排列,并选择包含排列的对象?我觉得这“应该”是可能的,但我不确定该使用什么操作符 谢谢C# 是否可以使用linq枚举两个IEnumerable的所有置换,c#,linq,ienumerable,permutation,C#,Linq,Ienumerable,Permutation,我可以使用循环来实现这一点,但是有没有办法获取两个IEnumerable,枚举所有可能的排列,并选择包含排列的对象?我觉得这“应该”是可能的,但我不确定该使用什么操作符 谢谢 James你是说什么基本上是笛卡尔连接?你可以这样做 var query = from item1 in enumerable1 from item2 in enumerable2 select new { Item1 = item1, Item2 = item2 } 这是
James你是说什么基本上是笛卡尔连接?你可以这样做
var query = from item1 in enumerable1
from item2 in enumerable2
select new { Item1 = item1, Item2 = item2 }
这是正确的。扩展方法等效为:
var query = enumerable1.SelectMany(
x => enumerable2,
(item1, item2) => new { Item1 = item1, Item2 = item2 }
);
或
这可能是获得所有排列的方法——请记住它是O(n*m)。但是,如果只需要一个排列(比如说随机排列),最好在每个列表上使用带有随机索引的
ElementAt()
,以生成该排列。
var query = enumerable1.SelectMany(
item1 => enumerable2.Select(item2 =>
new { Item1 = item1, Item2 = item2 });
);