配列で使用できるメソッド

要素の個数を取得する(size, length)

a = [1, 2, 3]
a.size #=> 3

最後尾に要素を追加する(push)

a = [1, 2, 3]
# push を使用すると複数個を追加できる。
a.push(4, 5) #=> [1, 2, 3, 4, 5]
# 一つのみ追加するなら << でも可
a << 6 #=> [1, 2, 3, 4, 5, 6]

配列を連結する(concat, +)

+演算子は非破壊的、concatは破壊的(レシーバーが変更される)

a = [1, 2, 3]
b = [4, 5, 6]
a + b #=>[1, 2, 3, 4, 5, 6]
# a、bも変更されない!!
a #=> [1, 2, 3]
b # => [4, 5, 6]

a.concat(b) #=> [1, 2, 3, 4, 5, 6]
# aは変更される
a # => [1, 2, 3, 4, 5, 6]
# bは変更されない
b # => [4, 5, 6]

和集合、差集合、積集合

rubyにはsetクラスが準備してあり、そちらの方が高速。

a = [1, 2, 3]
b = [3, 4, 5]

# 和集合
a | b # => [1, 2, 3, 4, 5]

# 差集合
a - b # => [1, 2]

# 積集合
a & b # => [3]

インデックスを複数指定して要素を取得する(values_at)

a = [1, 2, 3, 4, 5]
a.values_at(0, 3, 5) #=> [1, 4, nil]

インデックスを指定して要素を削除する(delete_at)

a = [1, 2, 3, 4]
a.delete_at(2) # => 3
a # => [1, 2, 4]

# 指定したインデックスで要素が見つからない場合、nilを返す
a.delete_at(10) #=> nil

値を指定して要素を削除する(delete)

a = [1, 2, 3, 4, 2]
a.delete(2) #=> 2
a #=> [1, 3, 4]

# 指定した値で要素が見つからない場合、nilを返す
a.delete(10) #=> nil

ブロックを評価し、戻り値が真の要素を削除した配列を返す(delete_if)

要素を一つずつブロックに渡し、レシーバーに変更があった場合に要素を削除する。

a = [1, 2, 3, 4, 5, 6]
a.delete_if(&:odd?) # == a.delete_if { |n| n.odd? }
a # => [2, 4, 6]

ブロックを評価し、戻り値が真の要素を削除した配列を返す(reject)

delete_ifと挙動は同じ。しかし、reject!は違うので注意!!

a = [2, 4, 6]

a.delete_if(&:odd?) #=> [2, 4, 6] : レシーバーを返す!!
a.reject(&:odd?) #=> [2, 4, 6] : レシーバーを返す!!
a.reject!(&:odd?) #=> nilを返す!!

ブロックを評価し、戻り値が真の要素のみを配列で返す(select、find_all)

a = [1, 2, 3, 4]
a.select(&:even?) #=> [2, 4]
p a #=> [1, 2, 3, 4]

# 破壊的メソッド有(select!)
a.select!(&:even?) #=> [2, 4]
p a #=> [2, 4]

# 戻り値が真の要素がない場合、空の配列を返す。
a = [1, 3, 5]
a.select(&:even?)  #=> []
a.select!(&:even?) #=> []