将选择器应用于可能无限序列 C# 的几个元素

Apply selectors on couples of elements of possibly infinite sequences C#

我必须实现一个扩展方法

public static IEnumerable<TResult> MyMerge<T1, T2, TResult>(this IEnumerable<T1> s1, IEnumerable<T2> s2, Func<T1, T2, TResult> f)

returns 序列 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;

但是当一个序列比另一个序列长时,这也会中断。我该如何解决?

.NET 已经实现了这个 精确 功能,Enumerable.Zip.

至于如何实现,如果你想自己实现的话,还是比较简单的。为每个可枚举对象获取一个 IEnumerator,而两者都有另一个值,将结果选择器应用于两个当前值和 yield 结果。