1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Rubyで配列とハッシュテーブルを使う

2022-02-03 19:53:11

Rubyの配列とハッシュはインデックス付きのコレクションです。

どちらも、キーでアクセスするオブジェクトのコレクションを保存します。配列のキーは整数です。ハッシュテーブルは、任意のオブジェクトをキーとして使用できます。配列とハッシュテーブルは、新しい要素を格納するために必要に応じてサイズを変更します。配列の要素へのアクセスは効率的であるが、ハッシュテーブルは柔軟である。配列やハッシュテーブルには、さまざまな種類のオブジェクトを格納することができる。

配列リテラル(角括弧で囲まれた要素の集合)を使用して、新しい配列オブジェクトを作成し、初期化することができます。配列オブジェクトの場合、角括弧の間にインデックスを指定すると、次の例のように個々の要素にアクセスすることができます。

a=[1,'cat',3.14] #Array with three elements

# Access the first element

a[0] -> 1

#set the third element

a[2] = nil

#Display this array

a ->[1,'cat',nil]



この例では、特殊な値nilが使われていることにお気づきでしょうか。多くの言語におけるnil(またはnull)の概念は、"no object"を意味します。Rubyでは、nilは他のオブジェクトと同じように、何も持っていないオブジェクトを表すために使われることを除けば、オブジェクトです。

時には単語の配列を作るのは面倒です。引用符やカンマがたくさん出てきます。幸いなことに、Rubyにはショートカットがあります。

a = ['ant','bee','cat','dog','elk']

a[0] -> "ant"

a[3] - > "dog"

#this is the same:

a = %w{ant bee cat dog elk}

a[0] -> "ant"

a[3] -> "dog"



Rubyのハッシュテーブルは配列に似ています。ハッシュ・リテラルは角括弧の代わりに括弧を使う。このリテラルは各項目に対してキーと値の2つのオブジェクトを提供しなければならない。

例えば、楽器と所属する交響曲のセクションを対応付けるには、次のようなハッシュリテラルを使います。

inst_section = {

'cello' => 'string',

'clarinet' => 'woodwind',

'drum' => 'percussion',

'oboe' => 'woodwind',

'trumpet' => 'brass',

'violin' => 'string'

}



=> 左側がキーで、右側がそれに対応する値です。ハッシュテーブルの中では、キーは一意でなければなりません(2つの "drum" アイテムが存在してはいけません)。ハッシュテーブルの中のキーと値は、どんなオブジェクトでも構いません。値が配列であるハッシュテーブルや、他のハッシュテーブルなどがあるかもしれません。

ハッシュテーブルは、配列と同じ角括弧表現でインデックスを作成します。

inst_section['oboe'] -> "woodwind"

inst_section['cello'] -> "string"

inst_section['bassoon'] -> nil



上の例で示したように、デフォルトでは、ハッシュテーブルが含んでいないキーでインデックスを作った場合、ハッシュテーブルはnilを返します。例えば、ハッシュテーブルを使って各キーの出現回数を数える場合、このデフォルト値が0であれば便利です。これは簡単で、新しい空のハッシュテーブルを作るときに、デフォルト値を指定できます。

histogram = Hash.new(0)

histogram['key1'] ->0

histogram['key1'] = histogram['key1'] + 1

histogram['key1'] ->1