我必须实现扩展方法
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;
但是当一个序列比另一个序列长时,这也会破坏。我怎么解决这个问题?
答案 0 :(得分:5)
.NET已经实现了此完全功能,Enumerable.Zip
。
至于如何实现它,如果你想自己做,那就相当简单了。为每个可枚举项获取IEnumerator
,而两个都有另一个值,将结果选择器应用于两个当前值和yield
结果。