通过引用他们的indice来重新排列数组元素的最简单方法是什么?像这样:
[:a, :b, :c, :d].rearrange(3, 1, 0, 2) # => [:d, :b, :a, :c]
[:a, :b, :c, :d].rearrange!(3, 1, 0, 2) # => [:d, :b, :a, :c]
答案 0 :(得分:5)
嗯,Ruby已经有了这个方法,只有它被称为values_at:
>> [:a, :b, :c, :d].values_at(3, 1, 0, 2)
=> [:d, :b, :a, :c]
答案 1 :(得分:3)
我转过身来。单个排列只是一个将Array映射到另一个Array的函数,所以这看起来很自然:
a = [:a, :b, :c, :d]
permuted = [3, 1, 0, 2].map { |i| a[i] }
如果有必要,可以很容易地将其修补为数组:
class Array
def permute(*p)
p.map { |i| self[i] }
end
end
错误检查,permute!
和其他细节留作练习。