gpt4 book ai didi

scala - size 和 size 的区别是

转载 作者:行者123 更新时间:2023-12-05 00:45:32 26 4
gpt4 key购买 nike

size 之间的语义区别是什么?和 sizeIs ?例如,

List(1,2,3).sizeIs > 1 // true
List(1,2,3).size > 1 // true

Luis 在 comment 中提到那

...on 2.13+ one can use sizeIs > 1 which will be more efficient than size > 1 as the first one does not compute all the size before returning



Add size comparison methods to IterableOps #6950似乎是引入它的拉取请求。

阅读 Scaladoc

Returns a value class containing operations for comparing the size of this $coll to a test value. These operations are implemented in terms of sizeCompare(Int)



我不清楚为什么是 sizeIs比常规更高效 size ?

最佳答案

据我了解这些变化。

这个想法是对于没有 的集合。 O(1) (常数)size .然后,sizeIs可以更有效,特别是与小值(如评论中的 1)的比较。

但为什么?
简单,因为不是计算所有大小然后进行比较,sizeIs返回一个对象,在计算比较时,可以提前返回。
例如,让我们检查 code

def sizeCompare(otherSize: Int): Int = {
if (otherSize < 0) 1
else {
val known = knownSize
if (known >= 0) Integer.compare(known, otherSize)
else {
var i = 0
val it = iterator
while (it.hasNext) {
if (i == otherSize) return if (it.hasNext) 1 else 0 // HERE!!! - return as fast as possible.
it.next()
i += 1
}
i - otherSize
}
}
}

因此,在评论的例子中,假设一个非常非常长的 列表三个要素。 sizeIs > 1一旦它知道 就会返回列表至少有一个元素和 hasMore .因此,节省了遍历其他两个元素以计算大小为 3 然后进行比较的成本。

请注意:如果集合的大小大于比较值,则性能将大致相同(可能比 size 慢,因为每个周期都有额外的比较)。因此,我只建议将此用于与小值进行比较,或者当您认为这些值将小于集合时。

关于scala - size 和 size 的区别是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com