2011-11-11 102 views
-1

我需要經過x個對象。每個對象都有(int)ID和(bool)完整字段。 ID字段將是唯一的。如何查找具有完整== 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=true) 

在上面,我應該得到的對象4,5,6,又如:

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) 

在這種情況下, ,完整== 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#中有任何內置方法可以做到這一點,但它是一個迭代對象的簡單情況,保留了前兩個值的歷史記錄。當prev_val_1 == prev_val_2 == curr_val時,將結果與相應的ID一起打印出來。

+0

這是一個很好的解決方案,如果你將永遠需要尋找三個值的序列,但它會變得不可收拾很快,如果你嘗試延長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);