Rubyの配列とハッシュは、インデックス付きのコレクション
→配列とハッシュどちらにもオブジェクトのコレクションが格納され、キーを使ってその各要素にアクセスできる。
→どちらの場合も、新しい要素を追加する際に、必要に応じてサイズが自動的に拡張される。
要素へのアクセスは配列の方が効率的だが、柔軟性はハッシュが上。
特定の1つの配列やハッシュの中にさまざまな型のオブジェクトを混在させることも可能。
新しい配列オブジェクトの作成と初期化を行う方法のひとつは、配列リテラル([]の中に要素のリストを記述したもの)を指定すること。
※rubyでは、配列インデックスは0から始まる
a = [1, 'cat', 3.14] #3つの要素を持つ配列 a[0] #先頭の要素(1)にアクセス a[2] = nil #3番目の要素の値を設定 #現在の配列 [1, 'cat', nil]
rubyの場合、nilは"オブジェクトが存在しない"のではなく、"何もないことをあらわすオブジェクト"である。
配列オブジェクトのメソッド">>"は、配列の末尾に1項目追加する
ages = [] for person in @people ages << person.age end
単語の配列は、省略記法で省略できる。
a = ['ant', 'bee', 'cat', 'dog', 'elk']
#上下は同じ意味。
a = %W{ ant bee ct dog elc }
Rubyのハッシュは配列に似ている。ハッシュリテラルを指定する場合、[]の代わりに{}を使う。
→リテラルでは、要素ごとにキーと値の2つのオブジェクトを指定する必要がある。
inst_section = {
:cello => '弦楽器',
:clarinet => '木管楽器',
:drum => '打楽器',
:oboe => '木管楽器',
:trumpet => '金管楽器',
:violin => '弦楽器'
(左がキー、右が値)
重複したキーは許さない
キー、値、どちらにも任意の種類のオブジェクトを指定できる(通常はキーにシンボルを指定)
インデックス指定は以下の通り
inst_section[:oboe] #=>'木管楽器' inst_section[:cello] #=>'弦楽器' inst_section[:bassoon] #=>nil
ハッシュに格納されていないキーを指定した場合はnilが返る。nilは条件式では偽を意味する。