如果我有一个像这样的 IEnumerable:
string[] items = new string[] { "a", "b", "c", "d" };
我想遍历所有成对的连续项目(大小为 2 的滑动窗口)。这将是
("a","b"), ("b", "c"), ("c", "d")
我的解决方案是这样
public static IEnumerable<Pair<T, T>> Pairs(IEnumerable<T> enumerable) {
IEnumerator<T> e = enumerable.GetEnumerator(); e.MoveNext();
T current = e.Current;
while ( e.MoveNext() ) {
T next = e.Current;
yield return new Pair<T, T>(current, next);
current = next;
}
}
// used like this :
foreach (Pair<String,String> pair in IterTools<String>.Pairs(items)) {
System.Out.PrintLine("{0}, {1}", pair.First, pair.Second)
}
当我编写这段代码时,我想知道 .NET 框架中是否已经有函数可以做同样的事情,而且不仅适用于对,而且适用于任何大小的元组。恕我直言,应该有一种很好的方法来执行这种滑动窗口操作。
我使用 C# 2.0,我可以想象使用 C# 3.0(w/LINQ)有更多(更好)的方法可以做到这一点,但我主要对 C# 2.0 解决方案感兴趣。不过,我也会欣赏 C# 3.0 解决方案。