查找连续的条目

时间:2011-11-11 20:04:24

标签: c# .net

我需要经历x个对象。每个对象都有(int)ID和(bool)完整字段。 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=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)

在这种情况下,3个连续的Complete == true对象不存在。

4 个答案:

答案 0 :(得分: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)));

答案 1 :(得分:0)

我不认为C#中有任何内置方法可以做到这一点,但这是一个简单的迭代对象的例子,保留了前两个值的历史记录。当prev_val_1 == prev_val_2 == curr_val时,请将结果与相应的ID一起打印出来。

答案 2 :(得分: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

答案 3 :(得分:0)

var a = myList.Where((q, index) =>
    q.IsDone &&
    index < myList.Count-2 &&
    myList[index+1].IsDone &&
    myList[index+2].IsDone);