5

假设我有一个 Array ary = [0.0, 1.0, 5.0, 1.0, -2.0, 3.5],我想输出另一个相同大小的数组,其中包含ary按值排序的索引。换句话说,输出应该是[4,0,1,3,5,2]。有没有一种有效的方法来做到这一点Enumerableor Array

我能想象的最简单的解决方案如下:

class Array
  def sorted_indices
    self.map.with_index{ |v,i| [v,i] }.sort{ |a,b| a[0] <=> b[0] }.map { |v| v[1] }
  end
end

但我觉得必须已经内置了一些更简单的东西。

重要的是要注意数组中的值不是唯一的。结果数组中不应出现多次索引(换句话说,[4,0,1,1,5,2]不正确)。

4

1 回答 1

6
ary.each_index.sort_by{|i| ary[i]}
# => [4, 0, 1, 3, 5, 2]
于 2013-07-24T17:43:32.493 回答