【发布时间】:2015-11-14 07:15:28
【问题描述】:
[20, 32, 32, 21, 30, 25, 29, 13, 14].min(2)
# => [13, 20]
为什么不是[13, 14]?以及如何做我得到我想要的,两个最小的元素(线性时间)?
The doc 的句子 “如果给出 n 参数,则最少 n 个元素作为数组返回” 我不太清楚,但我认为它说 min(2) 应该给我最小的两个元素。我找不到太多关于它的信息,但 this thread,这可能是起源,似乎同意我的观点,并说它应该返回与 sort.first(n) 相同的返回值,但事实并非如此:
[20, 32, 32, 21, 30, 25, 29, 13, 14].sort.first(2)
# => [13, 14]
对不起,如果是愚蠢的问题,对“大”示例感到抱歉,但这已经减少了 - 再删除一个数字(13 或 14 除外)确实给了我[13, 14]。
【问题讨论】:
-
这是 2.2 中的新方法,我怀疑实现中存在需要修复的错误。事实上,您有问题的 Array 的许多变体确实得到了正确答案,包括只是交换 13 和 14 的顺序。
-
这里是 min 的源代码,如果有人想调试它:github.com/ruby/ruby/blob/…
-
我也有同样的问题。我认为你是对的,我发现
min_by(2){|i| i}也返回了错误的结果。 -
问题跟踪器中的相同问题我无法找到任何关于它的信息bugs.ruby-lang.org/issues
-
我刚刚报告了错误here。