我刚刚写了这个函数。它需要两个集合并将这两个集合的所有可能排列返回为可枚举的元组。 (还有三合一版本。)
public static IEnumerable<(Tx x, Ty y)>
CrossJoin<Tx,Ty>(IEnumerable<Tx> xs, IEnumerable<Ty> ys)
{
foreach (Tx x in xs)
foreach (Ty y in ys)
yield return (x,y);
}
这个函数已经存在于 dot-net 标准库中吗?我已经研究过所有有用的 LINQ 函数,但没有找到我需要的东西。
像这样的函数通常已经写好了。像
Select
这样的简单函数,您可以自己编写,但我们更高兴的是标准库做到了这一点,并且以尽可能最好的高度优化的严格测试方式做到了。
Enumerable.Join
。如果您使用为两个集合的所有元素返回相同值的键选择器,它将执行交叉连接
var l1 = new List<string>{"a", "b", "c"};
var l2 = new List<string>{"x", "y", "z"};
var l3 = l1.Join(l2, x => 1, y=> 1, (x,y) => new {first = x, second = y});
foreach (var f in l3)
Console.WriteLine(f);
另请参阅这个小提琴