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

私はそれを少し好転させます。単一の順列は、配列を別の配列にマップする単なる関数であるため、これは自然に思えます。

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!、およびその他の細かな点は演習として残します。

于 2012-09-02T02:51:56.537 に答える