Сжать вместе N IEnumerable ? Перебирать их одновременно?

У меня есть: -

IEnumerable<IEnumerable<T>> items;

и я хотел бы создать: -

IEnumerable<IEnumerable<T>> results;

где первый элемент в «результатах» - это IEnumerable первого элемента каждого из IEnumerables из «items», второй элемент в «results» является IEnumerable второго элемента каждого из «items» и т. д.

IEnumerables не обязательно одинаковой длины. Если некоторые из IEnumerables в элементах не имеют элемента по определенному индексу, то я d ожидать, что соответствующий IEnumerable в результатах будет содержать меньше элементов.

Например: -

items = { "1", "2", "3", "4" } , { "a", "b", "c" };
results = { "1", "a" } , { "2", "b" }, { "3", "c" }, { "4" };

Изменить: Другой пример (запрошен в комментариях): -

items = { "1", "2", "3", "4" } , { "a", "b", "c" }, { "p", "q", "r", "s", "t" };
results = { "1", "a", "p" } , { "2", "b", "q" }, { "3", "c", "r" }, { "4", "s" }, { "t" };

Я не знаю заранее, сколько там последовательностей , ни сколько элементов в каждой последовательности. У меня может быть 1000 последовательностей с 1000000 элементов в каждой, и мне могут понадобиться только первые ~ 10, поэтому я хотел бы использовать (ленивое) перечисление исходных последовательностей, если можно. В частности, я не хочу создавать новую структуру данных, если могу помочь.

Есть ли встроенный метод (похожий на IEnumerable.Zip), который может это сделать?

Есть ли другой способ?

7
задан Iain Galloway 21 October 2010 в 16:00
поделиться