Edited at

Rubyの配列でswap(入れ替え)メソッド

More than 3 years have passed since last update.

Rubyで配列の中身を入れ替えたいときのswapメソッドをふと考えました。

コンセプトとしてはarray.swap!(a, b)でarrayのa番目とb番目の要素が入れ替わるメソッドです。

Arrayクラスに以下の様に定義しました。Array#swapは非破壊メソッド、Array#swap!は破壊メソッドです。


定義

class Array

def swap!(a, b)
raise ArgumentError unless a.between?(0, self.count-1) && b.between?(0, self.count-1)

self[a], self[b] = self[b], self[a]

self
end

def swap(a, b)
self.dup.swap!(a, b)
end
end


実行結果

irb(main):014:0> a = [1, 2, 3, 4, 5]

=> [1, 2, 3, 4, 5]
irb(main):015:0> a.swap(0, 3)
=> [4, 2, 3, 1, 5]
irb(main):016:0> a
=> [1, 2, 3, 4, 5]
irb(main):017:0> a.swap!(1, 4)
=> [1, 5, 3, 4, 2]
irb(main):018:0> a
=> [1, 5, 3, 4, 2]