如果我有一个类似于
我的解决方案是这样的。
当我编写这段代码时,我想知道.NET框架中是否已经有函数可以做到相同的事情,并且不仅针对成对元组,而是针对任何大小的元组。我的想法是,应该有一种好的方法来执行这种滑动窗口操作。
我使用的是C# 2.0,我可以想象,通过C# 3.0(使用LINQ),有更多更好的方法来实现此功能,但我主要关注C# 2.0的解决方案。尽管如此,我也会欣赏C# 3.0的解决方案。
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的解决方案。
SmartEnumerator
共享很多实现,它可以告诉你一个项目是否是列表中的最后一个。http://msmvps.com/blogs/jon_skeet/archive/2007/07/27/smart-enumerations.aspx - Ben Voigt