я должен осуществить это расширение-методаПрименение селекторов на пары элементов, возможно, бесконечных последовательностей С #
public static IEnumerable<TResult> MyMerge<T1, T2, TResult>(this IEnumerable<T1> s1, IEnumerable<T2> s2, Func<T1, T2, TResult> f)
, что возвращает последовательность F (x1, y1), F (x2, y2), где ... все xn являются элементами s1 и все yn являются элементами s2.
Моя проблема заключается в том, что эта последовательность должна иметь одинаковую длину кратчайшей последовательности, и оба s1 и s2 могут быть бесконечными. Если бы они были не такими, я мог бы сделать
var res = new List<TResult>();
for (var i = 0; i<Math.Min(s1.Count(), s2.Count()) ; i++)
{
res.Add(f(s1.ToArray()[i], s2.ToArray()[i]));
}
return res;
, но это также приводит к тому, что одна последовательность длиннее другой. Как я могу это решить?
В коде, который у вас есть, на каждой итерации (то есть для каждого элемента в наименьшей последовательности) вы просматриваете * целые * из * последовательности *, чтобы подсчитать их размер, затем вы копируете каждый отдельный элемент в обеих последовательностях к новым массивам, чтобы просто вытащить * один * элемент из каждого массива. Это будет крайне неэффективно. Простое копирование значений в массивы * один раз * проблематично; делаю это за каждый предмет, который вы получаете .... – Servy
@Servy Ehmm да, допустим, у меня есть много, чтобы улучшить обработку последовательностей :) – Sanci