使用Linq与之前的记录进行比较

时间:2013-07-26 03:32:50

标签: c# linq

在C#中,可以在使用foreach和LINQ时将一条记录与之前的记录进行比较。如果是,请告诉我解决方案。

1 个答案:

答案 0 :(得分:1)

不确定

var results = sequence.Zip(sequence.Skip(1), (p, c) => f(p, c));

f是您比较pc的方式。

或者:

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是完整的。