VB.NET - 合并 TakeWhile 和 SkipWhile 以获得两个分区

VB.NET - Combine TakeWhile and SkipWhile to get both partitions

有没有办法使用相同的谓词将 TakeWhileSkipWhile 组合在同一个列表上以获得两个分区,或者这会是过早的优化吗?这会在幕后自动完成吗?

注意列表按Property

排序

下面是我如何在不优化的情况下获得分区的两半:

Dim partA = list.TakeWhile(Function(e) e.Property = True)
Dim partB = list.SkipWhile(Function(e) e.Property = True)

我也可以用 IEnumerator 一次性做到这一点,但是如果我在 collection 中没有超过几百个项目有什么意义吗?

编辑:这样会更好吗,因为它只遍历 collection 一次?

Dim partA As List(Of MyType)
Dim partB As List(Of MyType)
Dim iter = list.GetEnumerator()
While iter.MoveNext()
    If iter.Current.Property = True Then
        partA.Add(iter.Current)
    Else
        partB.Add(iter.Current)
    End If
End While

您的编辑不等同于您问题中的前两行代码,除非所有正确都出现在所有错误之前。如果你想要一种内置的方式来做你在编辑中所做的事情,你可以做

Dim itemsByProperty = list.ToLookup(Function(e) e.Property)

现在 partA 相当于 itemsByProperty(True)partB 相当于 itemsByProperty(False)