読者です 読者をやめる 読者になる 読者になる

nekoTheShadow’s diary

技術ブログとして始めたはずが、読書&愚痴ブログになりました(´・ω・`)

配列内をswapしよう。

rubyでは数値の入れ替え的なことが簡単にできることが知られています。
つまりはこんな感じ。

x = 1
y = 2
x,y = y,x
p x #=> 2
p y #=> 1

配列の場合も同じです。

ary = [0,1]
ary[0], ary[1] = ary[1], ary[0]
p ary #=> [1,0]

たとえば変数宣言のとき、下のような書き方をすることがよくあります。

x,y = 0,1
p x #=> 0
p y #=> 1

上でやったような中身の入れ替えはこれの延長ですね。
ちなみに応用編として

ary = [0,1]
x,y = ary
p x #=> 0
p y #=> 1

であるとか、

ary = [["a","b"],["c","d"]]
ary.each do |str1,str2|
  p str1 #=> "a" -> "c"
  p str2 #=> "b" -> "d"
end 

というようなことができることもよく知られているわけですね。便利!

閑話休題
たった一行で配列内部の入れ替えが可能になるのは便利ですが、コードが膨大化するにつれて、変数名などが長くなる傾向があります。
特に配列などはそれが顕著で、そのあとに後置ifなどを置くと、一行が目も当てられないほどに長くなってしまいます。

個人的に配列内の入れ替えはよく使うので、それに対応したメソッドを作っておきたいと思います。

できました。
破壊的なものと破壊的でないものの二つを作っておけば安心(?)ですね。