San*_*nci 0 c# ienumerable extension-methods yield-return
我必须实现扩展方法
public static IEnumerable<TResult> MyMerge<T1, T2, TResult>(this IEnumerable<T1> s1, IEnumerable<T2> s2, Func<T1, T2, TResult> f)
Run Code Online (Sandbox Code Playgroud)
返回序列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;
Run Code Online (Sandbox Code Playgroud)
但是当一个序列比另一个序列长时,这也会破坏.我该如何解决这个问题?
.NET已经具有这种确切功能的实现Enumerable.Zip.
至于如何实现它,如果你想自己做,它是相当简单的.获取IEnumerator每个可枚举的值,而两者都有另一个值将结果选择器应用于两个当前值和yield结果.
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |