配列で使用できるメソッド
- 要素の個数を取得する(size, length)
- 最後尾に要素を追加する(push)
- 配列を連結する(concat, +)
- 和集合、差集合、積集合
- インデックスを複数指定して要素を取得する(values_at)
- インデックスを指定して要素を削除する(delete_at)
- 値を指定して要素を削除する(delete)
- ブロックを評価し、戻り値が真の要素を削除した配列を返す(delete_if)
- ブロックを評価し、戻り値が真の要素を削除した配列を返す(reject)
- ブロックを評価し、戻り値が真の要素のみを配列で返す(select、find_all)
要素の個数を取得する(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?) #=> []