勉強メモ

主にプログラミングの勉強メモ

Ruby 配列の主なメソッド

よく使いそうなものをまとめておく。 実行環境 ruby 2.3.7

要素を加える

unshift(item)

先頭に新しい要素を付け加える

a << item, a.push(item)

配列の末尾に要素を付け加える。

a.concat(b), a+b

配列 a に 配列 b を付け加える。 concat は破壊的メソッド、 a+b は新しい配列を作る。

a = [1,2,3,4]
a.concat([5,6])
p a #=> [1,2,3,4,5,6]

a[n] = item, a[n..m] = item, a[n, len] = item

配列の指定した要素を item に置き換える

a = [1,2,3,4,5,6]
a[2..4] = 0
p a #=> [1, 2, 0, 6]
a[1, 3] = 9
p a #=> [1, 9]

a.compact, a.compact!

配列から要素が nil の物を取り除く。

a.delete(x)

配列から要素 x を取り除く。xが存在しない場合は nil を返す。

a.delete_if{|item| ...}, a.reject {|item| ... } a.reject! {|item| ... }

配列a の各要素について、ブロックを実行した結果が真だった場合、a から item を取り除く。 delete_if と rejecr! は破壊的メソッド。

a = [1,2,3,4,6,8,9]
a.reject! {|item| item % 2 == 0 }
p a #> [1,3,9]

a.slice!(n), a.slilce!(n..m), a.slice!(n, len)

a から指定された部分を取り除き、取り除いた値を返す。

a = [1,2,3,4]
p a.slice!(0..2) #> [1,2,3]
p a #> [4]

a.uniq, q,uniq!

a の重複する要素を削除する。

a.shift, a.pop

それぞれ a の先頭、末尾を取り除き、取り除いた値を返す。

要素を書き換える

a.collect {|item| ... }, a.map {|item| ... }

配列の各要素についてブロックを実行し、その結果を集めて新しい配列を作る。! をつけた破壊的メソッドもある。

a = [1,2,3,4]
p a.map{|item| item*2} #> [2,4,6,8]

a.fill(value), a.fill(value, begin), a.fill(value, begin, len), a.fill(value, n..m)

配列の要素をvalue に置き換える。 引数が一つの場合は全てvalueに置き換える。 引数が二つの場合は、beginから配列の末尾まで、引数が三つの場合はbeginからlen個までをvalueにする。 二つ目の引数に range を指定した場合は、その範囲をvalue にする。

a.flatten

配列の中に配列が入れ子になっている場合、全て展開して一つの配列にまとめる。(平坦化)

a.reverse

a の要素を逆順にする。

a.sort, a.sort{|i,j| ...}

a の各要素を並べ替える。並べ替え方はブロックで指定可能。ブロック指定がない場合は <=> 演算子で比較する。 ! を使った破壊的メソッドもある。

a.sort_by {|i| ... }

a を並べ替える。結果は全ての要素についてブロックの結果を評価した結果で行われる。

a = [2,4,1,3,6,0]
p a.sort_by{|i| -i } #> [6, 4, 3, 2, 1, 0]
p a.sort_by{|i| i } #> [0, 1, 2, 3, 4, 6]  大小比較して結果が小さい順になる

その他

a.each { |item| ... }, a.each_with_index {|item, index| ... }

配列の各要素についてブロックを実行する。インデックスも使用するときは each_with_indexで。

a.zip(b, c,,,) {|item_b, item_c, ... | ... }

配列a,b,c... の要素を一つづつ取り出し、その度にブロックを実行する。