Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找连续条目_C#_.net - Fatal编程技术网

C# 查找连续条目

C# 查找连续条目,c#,.net,C#,.net,我需要检查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)

我需要检查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=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)

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

我认为C#中没有任何内置方法可以做到这一点,但这是一个简单的情况,即在对象上迭代,保留前两个值的历史记录。当prev_val_1==prev_val_2==curr_val时,将结果及其相应的ID打印出来。

类似如下:

 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
var a=myList.Where((q,index)=>
q、 伊斯通&&
索引
如果您需要查找由三个值组成的序列,这是一个很好的解决方案,但如果您尝试扩展为4、5、6等连续值,它将很快失控。
var triplets = list.Select((item, index) => list.Skip(index).Take(3));
var candidates = triplets.Where(triplet => (triplet.Count() == 3) && 
                                           (triplet.All(item => item.Complete)));
var a = myList.Where((q, index) =>
    q.IsDone &&
    index < myList.Count-2 &&
    myList[index+1].IsDone &&
    myList[index+2].IsDone);