VB.NET - 结合TakeWhile和SkipWhile来获取两个分区

时间:2015-07-07 18:21:11

标签: vb.net linq list partitioning

有没有办法在同一个列表中使用相同的谓词组合TakeWhileSkipWhile来获取两个分区,还是会过早优化?这会在幕后自动完成吗?

请注意,该列表按Property

排序

以下是如何在没有优化的情况下获得分区的两半:

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

我也可以用IEnumerator一次拍摄,但如果我在集合中没有超过几百个项目,那么有什么意义吗?

编辑:那么这会更好吗,因为它只迭代一次收集?

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

1 个答案:

答案 0 :(得分:1)

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

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

现在相当于partAitemsByProperty(True),而partB等效于itemsByProperty(False)