foreach
在 C# 中,可以在使用LINQ时将一条记录与前一条记录进行比较。如果是,请告诉我解决方案。
问问题
830 次
1 回答
1
当然:
var results = sequence.Zip(sequence.Skip(1), (p, c) => f(p, c));
f
您比较p
和的方式在哪里c
。
或者:
public static IEnumerable<Tuple<T, T>> AdjacentPairs<T> (
this IEnumerable<T> sequence
) {
var e = sequence.GetEnumerator();
if(e.MoveNext()) {
var c = (T)e.Current;
while(e.MoveNext()) {
var p = c;
c = (T)e.Current;
yield return Tuple.Create(p, c);
}
}
}
然后:
var results = sequence.AdjacentPairs()
.Select(t => f(t.Item1, t.Item2));
或者,使用foreach
:
public static IEnumerable<Tuple<T, T>> AdjacentPairs<T> (
this IEnumerable<T> sequence
) {
var p = default(T);
bool first = true;
foreach(var c in sequence) {
if(!first) {
yield return Tuple.Create(p, c);
}
else {
first = false;
}
p = c;
}
}
用法与原始枚举器相同。
Zip
如果迭代您的收藏两次很便宜,那就太好了。原始枚举器是通用解决方案的首选。foreach
是为了完整性。
于 2013-07-26T03:35:53.290 回答