有没有办法在同一个列表中使用相同的谓词组合TakeWhile
和SkipWhile
来获取两个分区,还是会过早优化?这会在幕后自动完成吗?
请注意,该列表按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
答案 0 :(得分:1)
你的编辑不等同于你问题中的前两行代码,除非所有的法术都出现在所有法轮之前。如果您想要一种内置的方式来完成您在编辑中所做的事情,那么您可以
Dim itemsByProperty = list.ToLookup(Function(e) e.Property)
现在相当于partA
为itemsByProperty(True)
,而partB
等效于itemsByProperty(False)
。