2011-11-11 10 views
-1

私はx個のオブジェクトを通過する必要があります。各オブジェクトは、(int)IDフィールドと(bool)Completeフィールドを持ちます。 IDフィールドは一意になります。 Complete == trueと連続するIDフィールドを持つオブジェクトを見つけるにはどうすればいいですか?例えば、私はこの条件満たす任意の3つの連続したオブジェクトを見つけるしたい:この場合連続するエントリを見つける

object (ID=1, Complete=true) 
object (ID=2, Complete=true) 
object (ID=3, Complete=false) 
object (ID=4, Complete=true) 
object (ID=5, Complete=true) 
object (ID=6, Complete=false) 

object (ID=1, Complete=true) 
object (ID=2, Complete=true) 
object (ID=3, Complete=false) 
object (ID=4, Complete=true) 
object (ID=5, Complete=true) 
object (ID=6, Complete=true) 

上記では、私は、オブジェクト4、5、6別の例を取得する必要があります、Complete == trueの3つの連続するオブジェクトは存在しません。

答えて

1
var triplets = list.Select((item, index) => list.Skip(index).Take(3)); 
var candidates = triplets.Where(triplet => (triplet.Count() == 3) && 
              (triplet.All(item => item.Complete))); 
0

これを行うためにC#に組み込みのメソッドがあるとは思えませんが、前の2つの値の履歴を保持するオブジェクトを反復する単純なケースです。 prev_val_1 == prev_val_2 == curr_valの場合、結果を対応するIDで印刷します。このような

+0

あなたがこれまでの3つの値のシーケンスを探すために必要があるでしょうが、あなたがしようとした場合、それはすぐに手に負えなくなります場合、これは良い解決策であります4,5,6等の連続した値に拡張する。 –

0

何か:

from obj in objects 
    let next = obj.FirstOrDefault(t => t.id > obj.id && t.Completed) 
    let nextNext = null == next ? null : objects.FirstOrDefault(t => t.id > next.id && t.Completed) 
    where obj.completed && next != null && nextNext !=null select obj.id, next.id, nextNext.id 
0
var a = myList.Where((q, index) => 
    q.IsDone && 
    index < myList.Count-2 && 
    myList[index+1].IsDone && 
    myList[index+2].IsDone); 
関連する問題