如果我有一个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(带有LINQ)有更多(更好)的方法来执行此操作,但是我主要对C#2.0解决方案感兴趣。 不过,我也会感谢C#3.0解决方案。
猜你喜欢: