преобразовать пару массивов в массив пар (используя LINQ, если это возможно) - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть несколько типов S и T (например, S=object и T=string).У меня есть пара массивов этих типов, например

(S[], T[]) pairOfArrays;

, и я хочу преобразовать его в массив пар, например

(S, T)[] arrayOfPairs;

Как мне это сделать?Меня больше всего интересуют решения с LINQ, если это возможно.Пожалуйста, предположим, что два массива в pairOfArrays имеют одинаковую длину.


Я знаю другое направление:

pairOfArrays = (arrayOfPairs.Select(i => i.Item1).ToArray(),
                arrayOfPairs.Select(i => i.Item2).ToArray());

Проблема, с которой я столкнулся при поиске направления:Для итерации (используйте Select и т. д.) мне нужен IEnumerable, но (S[], T[]) - это не IEnumerable.И если я начну с pairOfArrays.Item1.Select(..., то я не знаю, как добраться до той же (по индексу) записи в Item2, которая у меня есть в моем Select выражении.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Используя Zip, вы можете получить соответствующие элементы и преобразовать их в кортежи:

var arrayOfPairs = pairOfArrays.Item1.Zip(pairOfArrays.Item2, (f, s) => new Tuple<S, string>(f, s))
                               .ToArray();

или на C # 7:

var arrayOfPairs = pairOfArrays.Item1.Zip(pairOfArrays.Item2, (f, s) => (f, s))
                               .ToArray();

менее идиоматический подход, чемвыше, но все же хорошее решение будет использовать Enumerable.Range:

var arrayOfPairs = 
    Enumerable.Range(0, pairOfArrays.Item1.Length)
            .Select(index => (pairOfArrays.Item1[index], pairOfArrays.Item2[index]))
            .ToArray();
0 голосов
/ 30 ноября 2018

Вы можете использовать Zip для этого:

var result = arrayOfS.Zip(arrayOfT, (first, second) => new { S = first, T = second });

, что приводит к списку { S, T }.

Альтернативно хороший цикл старого стиля:

for(int i = 0; i < arrayOfS.Length; i++)
{
    result[i] = new ST(arrayOfS[i], arrayOfT[i]);
}

Однако таким образом вы не можете использовать анонимные типы.

...