インデックスを参照して配列の要素を再配置する最も簡単な方法は何ですか?このようなもの:
[: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]
まあ、Ruby にはすでにこのメソッドがありますが、それはvalues_atと呼ばれているだけです:
>> [:a, :b, :c, :d].values_at(3, 1, 0, 2)
=> [:d, :b, :a, :c]
私はそれを少し好転させます。単一の順列は、配列を別の配列にマップする単なる関数であるため、これは自然に思えます。
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!
、およびその他の細かな点は演習として残します。