0

通过引用它们的索引来重新排列数组元素的最简单方法是什么?像这样的东西:

[: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]
4

2 回答 2

5

好吧,Ruby 已经有了这个方法,只是它被称为values_at

>> [:a, :b, :c, :d].values_at(3, 1, 0, 2)
=> [:d, :b, :a, :c]
于 2012-09-02T13:24:14.497 回答
3

我会转一下。单个排列只是一个将 Array 映射到另一个 Array 的函数,所以这看起来很自然:

a = [:a, :b, :c, :d]
permuted = [3, 1, 0, 2].map { |i| a[i] }

如有必要,很容易将猴子修补到 Array 中:

class Array
    def permute(*p)
        p.map { |i| self[i] }
    end
end

错误检查、permute!和更多细节留作练习。

于 2012-09-02T02:51:56.537 回答