【发布时间】:2022-11-04 00:20:16
【问题描述】:
我正在尝试从非常广泛的字符串列表中的模式检查中获得更好的性能。
我需要与给定模式匹配的 5 个首次出现。
我想知道是否
list.where(字符串中的模式).take(5)
被延迟计算并在发现 5 次后停止或 它会计算所有位置然后先取 5 吗? (在这种情况下,是否有 whereXfirstOccurences 方法,其中 X 是一个数字?)
谢谢你,
【问题讨论】:
标签: list performance dart
我正在尝试从非常广泛的字符串列表中的模式检查中获得更好的性能。
我需要与给定模式匹配的 5 个首次出现。
我想知道是否
list.where(字符串中的模式).take(5)
被延迟计算并在发现 5 次后停止或 它会计算所有位置然后先取 5 吗? (在这种情况下,是否有 whereXfirstOccurences 方法,其中 X 是一个数字?)
谢谢你,
【问题讨论】:
标签: list performance dart
可迭代对象是懒惰的。
如果你做list.where(computation).take(5),它:
moveNext 外,它什么也不做。moveNext 返回false,它就会停止做任何事情,因为take(5),它在此处的五个元素之后执行此操作。
如果您只使用for (var v in list.where(...).take(5)) ...,您将看不到这些步骤,但它们仍然存在。循环在找到五个值后停止,除了找到满足where 条件的前五个值所需的元素之外,不再查看其他元素。
如果条件非常挑剔,那可能仍然需要查看很多字符串。如果输入中只有四个匹配字符串,则在查找前五个匹配项时将遍历所有输入。 优化模式本身肯定也很有价值。
【讨论】: