Ruby

よく忘れるRubyの配列の状態を変更するメソッド

まえがき

・よく忘れるので独自の切り口でまとめてみた。

配列の「状態を変更」とは?

Rubyの配列オブジェクトには、CRUD操作を行う便利なメソッドが用意されている。
ちなみにCRUDとは、下記の単語の頭文字をとったもの。

Create
Read
Update
Delete

この配列のCRUD操作のメソッドの中で、UpdateとDeleteを行うメソッドが、「状態を変更」するメソッド。
なので、「配列の状態を変更するメソッド」は下記の2種類に大別できる。

(1)UPDATE系
(2)DELETE系

そして「UPDATE系」「DELETE系」には大まかに3種類の位置を指定するメソッドが存在する。

(1)先頭
(2)末尾
(3)直接指定

ここでメソッドの全体像を整理すると下記のような図を描ける。

 
- Update - unshift(先頭)
|        - push(末尾)
|        - insert(直接指定)
|
|
- Delete - shift(先頭)
         - pop(末尾)
         - delete, delete_at(直接指定)
 

では、それぞれのメソッドの挙動を詳しく見ていく。(ちなみに配列の中身は、すべてラーメン)

UPDATE系のメソッド

unshift

・配列の先頭に要素を追加する

ramens = ["miso", "tonkotsu", "shoyu"]
p ramens.unshift("shio")

=> ["shio", "miso", "tonkotsu", "shoyu"] # shioが先頭に追加された

push

・配列の末尾に要素を追加する。
<<も同じ意味。

ramens = ["miso", "tonkotsu", "shoyu"]
p ramens.push("shio") # pushで追加

=>["miso", "tonkotsu", "shoyu", "shio"]  # shioが末尾に追加された

p ramens << "tsukemen" ## << で追加

=> ["miso", "tonkotsu", "shoyu", "shio", "tsukemen"] # tsukemenが末尾に追加された

insert

・配列の位置を指定して、要素を追加する。
・第一引数に「挿入位置」、第二引数に「挿入要素」。

ramens = ["miso", "tonkotsu", "shoyu"]
p ramens.insert(0,"shio")

=> ["shio", "miso", "tonkotsu", "shoyu"] # 配列の0番目にshioが追加された

UPDATE系メソッドの共通点

・いずれのメソッドもオブジェクトの状態を変更する破壊的メソッド。
・要素を追加した配列オブジェクト(=レシーバ)が、返り値として返ってくる。

DELETE系のメソッド

shift

・配列の先頭の要素を削除する。  

ramens = ["miso", "tonkotsu", "shoyu"]

ramens.shift

=> "miso" # shiftによって、削除された要素が返り値になる

p ramens 

=> ["tonkotsu", "shoyu"]  # misoが先頭から削除された

pop

・配列の末尾の要素を削除する。

ramens = ["miso", "tonkotsu", "shoyu"]
ramens.pop  # popによって、削除された要素が返り値

=> "syoyu"

p ramens 

=>  ["miso", "tonkotsu"] # shoyuが末尾から削除された

delete

・配列の「要素」を指定して削除する。

ramens = ["miso", "tonkotsu", "shoyu"]
ramens.delete("tonkotsu")

=> "tonkotsu"

p ramens

=> ["miso", "shoyu"]

delete_at

・配列のインデックスを指定して削除する。

ramens = ["miso", "tonkotsu", "shoyu"]
ramens.delete_at(0)

=> "miso"

p ramens

=> ["tonkotsu", "shoyu"]

DELETE系メソッドの共通点

・いずれのメソッドもオブジェクトの状態を変更する破壊的メソッド。
・いずれのメソッドも削除した要素が返り値として返ってくる。