获取LINQ笛卡尔积的单个项

时间:2018-12-05 15:34:55

标签: c# list linq cartesian

var A = new[] {A, B}; 
var B = new[] {X, Y, Z}; 
var Product = 
from _A in A 
from _B in B 
select new[] { _A, _B };
//Intent below:
foreach (pair in Product)
{
SomeFunction(pair[0],pair[1])
}

//Output:
SomeFunction(A,X)
SomeFunction(A,Y)
SomeFunction(A,Z)
SomeFunction(B,X)
SomeFunction(A,Y)
SomeFunction(A,Z)

如何将两个列表合并为一个项目,而不是将_A和_B检索为自变量?这样,对于每个笛卡尔叉积组合(A,X..A,Y..A,Z等),我都可以将它们发送到另一个函数中进行处理?

理想情况下,这些变量将不是字符串,因此任何获取字符@索引的解决方法都将无效。

编辑: 看起来我一直都是对的。感谢社区确认我的意图。

1 个答案:

答案 0 :(得分:-1)

我认为您在那里95%,将您的榜样放在一起,您在那里99%。

您的查询将为您提供所需的笛卡尔积。

var A = new[] {A, B}; 
var B = new[] {X, Y, Z}; 
var Product = from _A in A 
              from _B in B 
              select new[] { _A, _B };

Product现在是IEnumerable<T>。看起来像这样:

[
    [A, X]
    [A, Y]
    [A, Z]
    [B, X]
    [B, Y]
    [B, Z]
]

您现在要做的就是枚举它的值,这是您的意图(尽管变量名错误):

//Intent below:
foreach (pair in Product)
{
    SomeFunction(pair[0], pair[1]);
}