Vb.net 使用LINQ检查对象是否按顺序跟随

Vb.net 使用LINQ检查对象是否按顺序跟随,vb.net,linq,sorting,Vb.net,Linq,Sorting,我有一个像这样的对象: Public Class MyObject Public Property Key as Intger get 'Elided for clarity set End Property Public Property Value as String get set End Property Private key as Intger Private value as String End Class 然后我有列表(MyObject)其中每个键都有一些值。。。如果

我有一个像这样的对象:

Public Class MyObject

Public Property Key as Intger
get 'Elided for clarity
set
End Property

Public Property Value as String
get
set
End Property

Private key as Intger
Private value as String

End Class
然后我有
列表(MyObject)
其中每个键都有一些值。。。如果对它们进行排序,则会有一系列相互跟随的键,但每个键之间的差异可能大于1。现在我得到这个列表的一个子集,我想(按键排序后)检查每个
MyObject.Key
之间的差异是否不大于1,然后得到这个子集


最好的方法是什么?

不知道这是否是最好的解决方案,但您可以使用聚合函数:

Dim blah = theList.Aggregate(0, Function(aggregator, aggragate)
                                    If aggregator >= 0 AndAlso aggragate.Key = aggregator + 1 Then
                                        Return aggragate.Key
                                    Else
                                        Return -1
                                    End If
                                End Function)

如果返回-1,则它们不是顺序的,否则是顺序的

您可以将此技巧与Zip和Skip结合使用,以获得差异,然后测试它们:

Dim differences = subset.Zip(subset.Skip(1), Function(a,b) b.Key - a.Key)
Dim valid = differences.All(Function(x) x <= 1)

这是因为,知道它们是排序的、唯一的,并且它们的差异不大于1,那么这些键必须按顺序排列。因此,关键点的数量比最后一个和第一个之间的差值多一个(例如,{11,12,13,14}=>14-11=4-1)。

b没有我的对象的属性吗?似乎它不认为它是MyObject类型的对象。
Dim valid = (subset.Last() - subset.First() = subset.Count() - 1)