2013-07-26 75 views
1

在C#中,可以使用foreach和LINQ來比較一條記錄與以前的記錄。如果是的話,讓我知道解決方案。使用Linq與以前的記錄進行比較

+1

發佈您到目前爲止的內容。 –

+0

我的英語可能不是您的第一語言,但請嘗試用正確的拼寫/語法寫一點。我很確定你知道「s」和「soln」不是真正的單詞。 –

回答

2

肯定的:

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

+0

什麼是Zip方法? –

+1

@ King King:['Zip'](http://msdn.microsoft.com/zh-cn/library/dd267698.aspx)。 – jason

+0

謝謝,它看起來像是一個框架版本4.5的東西,我正在使用3.5 –

相關問題