我需要经历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对象不存在。
答案 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);