配列やハッシュなどのオブジェクトをコレクションと呼びます。今回は,コレクション自体の操作方法を押さえた後,他のクラスからコレクションの機能を利用する方法までを紹介します。

 以前に学んだ「ブロック」は,元々は複数のオブジェクトの集まり(コレクション)に対する繰り返しを目的として導入された仕組みです。ブロックはコレクションと組み合わせることでより一層機能を発揮します。今回は復習を兼ねてRubyのコレクションとその使い方を学びます。

 コレクションとは,いくつかのオブジェクトをまとめて取り扱うための「容器」として振る舞うオブジェクトです。Rubyの標準ライブラリはいくつかのコレクション・クラスを提供しています。代表的なものはArray(配列)とHash(ハッシュまたは連想配列)です。この2つを中心に扱います。

Rubyの配列を操作する

 Arrayとは元々は「整然と並んだもの」という意味ですが,配列の実体も語の元の意味と似ています。例えば,整数1,2,3を含む配列を表現すると図1のようになります。

図1●配列のイメージ
図1●配列のイメージ

 整数が配列の格子の中にないことに注目してください。先ほど「コレクションは容器」と説明しましたが,実際には配列の中にオブジェクトが入っているのではなく,配列は複数のオブジェクトを参照しています。

 配列を作る方法は複数ありますが,一番簡単で一般的な方法は「配列式」を用いることです。配列式は「[]」で囲まれてカンマで区切られた式の並びです。図1で示した配列であれば次のような表現になります。

[1, 2, 3]

 動的型言語*1であるRubyでは,コレクションの中にもさまざまな型のオブジェクトが混在できます。ですから複雑な配列も記述できます。

[1, "two" [3, 4]]

 これは第1要素が整数の1,第2要素が文字列の"two",第3要素が配列(第1要素が3,第2要素が4)となっている各種オブジェクトが混在した配列を表現しています。

 配列の要素を取り出すには次のようにします。1行目が配列の初期化,2行目が要素の取り出しです。

ary = [1, 2, 3]
ary[0]

 C言語などの慣習に習い,要素番号(インデックス)は先頭が0から始まることに注意してください。

 インデックスには負の数も指定できます。この場合は一番最後の要素が-1番目になります(図2)。

図2●配列のインデックス
図2●配列のインデックス

 1つの要素を取り出すだけではなく,範囲を指定して配列の一部分を別の配列として取り出すこともできます。範囲の指定方法には,図3に挙げた3種類があります。「..」と「...」の意味の違いに注意してください。具体的には図4のように記述します。

[n,m]   先頭の位置と長さ
[n..m]  先頭の位置と末尾の位置(末尾を含む)
[n...m] 先頭の位置と末尾の位置(末尾を含まない)
図3●範囲を指定し,配列の一部を別の配列として取り出す3つの方法

a = [1, 2, 3]
a[1,2] # => [2,3]  1番の要素から2要素
a[1..2] # => [2,3] 1番の要素から2番の要素まで
a[1...2] # => [2]  1番の要素から2番の要素の前まで
図4●配列の一部を取り出した例

 配列の要素を変更するには,配列要素の参照を左辺(代入先)にして,代入するように記述します。

b = [4, 5, 6]
b[0] = 2
# [2, 5, 6]になる