まくまくRubyノート
配列に要素を追加する
2011-10-10

配列の末尾に要素を挿入

配列の末尾に要素を挿入するには、push メソッドを使用します。

a = [1, 2, 3]
a.push('A')
a  # => [1, 2, 3, "A"]

a.push('B', 'C')
a  # => [1, 2, 3, "A", "B", "C"]

C++ 風に << 演算子でも末尾に要素を追加できます。

a = [1, 2, 3]
a << 'A'
a  # => [1, 2, 3, "A"]

a << 'B' << 'C'
a  # => [1, 2, 3, "A", "B", "C"]

別の配列の要素を末尾に追加する場合は、+= 演算子を使用できます。 右辺には配列を指定する必要があります。

a = [1, 2, 3]
a += ['A', 'B', 'C']
a  # => [1, 2, 3, "A", "B", "C"]

配列の先頭に要素を挿入

配列の先頭に要素を挿入するには、以下のいずれかを使用します。

  • arr.unshift(...)
  • arr.insert(0, ...)
  • arr[0, 0] = ...

複数の値を一度に追加したい場合は、単純にカンマで区切って並べます(配列を渡してしまうと、要素として1つの配列が追加されてしまうので注意)。

a = [1, 2, 3]
a.unshift('A')
a  # => ["A", 1, 2, 3]

a.unshift('B', 'C')
a  # => ["B", "C", "A", 1, 2, 3]

a.unshift(['D', 'E'])
a  # => [["D", "E"], "B", "C", "A", 1, 2, 3]

インデックス指定で配列に要素を挿入

要素の挿入位置をインデックス指定して配列に要素を追加するには、以下のいずれかを使用します。

  • arr.insert(index, ...)
  • arr[index, 0] = ...
a = [1, 2, 3]
a.insert(2, 'A')
a  # => [1, 2, "A", 3]

a.insert(0, 'B')
a  # => ["B", 1, 2, "A", 3]

a.insert(-1, 'C')  # ※
a  # => ["B", 1, 2, "A", 3, "C"]

a.insert(10, 'D')
a  # => ["B", 1, 2, "A", 3, "C", nil, nil, nil, nil, "D"]

[] 演算子に負のインデックスを指定した場合は、insert メソッドで負のインデックスを指定した場合より、位置が前に 1 つずれるようです。

a = [1, 2, 3]
a[2, 0] = 'A'
a  # => [1, 2, "A", 3]

a[0, 0] = 'B'
a  # => ["B", 1, 2, "A", 3]

a[-1, 0] = 'C'
a  # => ["B", 1, 2, "A", "C", 3]

a[10, 0] = 'D'
a  # => ["B", 1, 2, "A", "C", 3, nil, nil, nil, nil, "D"]
2011-10-10