Ruby 从SortedSet检索max元素

Ruby 从SortedSet检索max元素,ruby,Ruby,我找到了SortedSet#max,但它似乎是O(N)。现在,我想做这样的事情: s = SortedSet.new((1..100000).to_a.reverse) 其中reverse只是为了确保 min_element = nil; s.each { |x| min_element = x; break } 对于最大元素,我将构建另一个SortedSet,将所有值乘以-1,并执行相同的操作。有更传统的方法吗?Monkey patchSortedSet class SortedSet

我找到了
SortedSet#max
,但它似乎是O(N)。现在,我想做这样的事情:

s = SortedSet.new((1..100000).to_a.reverse)
其中
reverse
只是为了确保

min_element = nil; s.each { |x| min_element = x; break }

对于最大元素,我将构建另一个
SortedSet
,将所有值乘以
-1
,并执行相同的操作。有更传统的方法吗?

Monkey patch
SortedSet

class SortedSet
  def max
    @keys[-1]
  end

  def min
    @keys[0]
  end
end

这是O(1)。

看起来真不错!但是我正在想为什么会出现以下错误:
max:undefined method[]for nil:NilClass(NoMethodError)
如果
为空,那么既没有最小值也没有最大值,这就是为什么会出现上述错误。我不知道为什么,但似乎只有在调用SortedSet之后,它才能工作,而不会显示任何错误。不管怎样,这帮了大忙,谢谢。我也在试着发现它。请给我一点时间。@DatNguyen我很确定它不应该是空的,至少在没有先调用
的情况下它是不能工作的。这是指向的链接。