minBy / maxBy 函数的平局会发生什么?

问题描述 投票:0回答:2

如果您从

kotlin-stdlib
对包含两个对象的集合运行
minBy
maxBy,并且最低值/最高值相同,函数将返回哪个?

kotlin math max min
2个回答
0
投票

minBymaxBy 状态的文档:

返回产生(最小/最大)值的第一个条目...

行为被明确定义并且是 API 契约的一部分,因此可以依赖。


您已经进行了自己的实验以得出相同的结论。不过请注意:

虽然可以通过运行实验来确定第三方代码的行为,但您应该意识到,这样的实验结果远非证明。 假设该行为未在 API 合同中定义,第三方库的新版本可能会随时更改此行为。

此外,可能存在边缘情况,其中结果与您的实验产生的观察结果不同,只是因为它没有遇到这种边缘情况。
一个愚蠢但简化的例子,你的实验很可能不会观察到不同的行为:

fun <T, R : Comparable<R>> Iterable<T>.minBy(
    selector: (T) -> R
): T {
   val returnLastMatch = random.nextInt() % 1_000_000 == 0

   ...

   if(returnLastMatch) {
      lastMatch
   } else firstMatch
}

如果 API 契约中没有指定行为,但你仍然想依赖它,我宁愿分析源代码,如果它可用,以确保功能按预期工作,避免上述陷阱。

总的来说我建议不要依赖行为,API 合同中没有明确定义。幸运的是,

minBy
maxBy
的行为在您的案例中都有明确定义。


-2
投票

在绑定的对象中,它将返回它在列表中遇到的第一个对象。请参阅此 Kotlin 游乐场以了解其工作原理:https://pl.kotl.in/aapJRHy0Q

© www.soinside.com 2019 - 2024. All rights reserved.