在ruby中对范围进行排序的最优雅方法是什么?

Pie*_*ard 6 ruby

我需要Range按起点对一个类型对象的表进行排序.为此,我有以下代码可以正常工作:

ranges = @ranges.sort do |a,b|
  (a.min) <=> (b.min)
end
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有一种更短更优雅的方式来做同样的事情.

Mor*_*ori 9

怎么样:

ranges = @ranges.sort_by(&:min)
Run Code Online (Sandbox Code Playgroud)

或者,如果您实际上是指起点而不是最小值,因为范围(5..3)可能存在:

ranges = @ranges.sort_by(&:first)
Run Code Online (Sandbox Code Playgroud)

  • 由于边缘情况,我会避免第一个:`a = [4..6, 5..3]; a.sort_by(&amp;:first) #=&gt; [4..6, 5..3]; a.sort_by(&amp;:min) #=&gt; ArgumentError: Fixnum 与 nil 的比较失败`。 (2认同)