Получить отдельные предметы LINQ Cartesian Product
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 ответ
Я думаю, что вы на 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]);
}