Rubyのややこしい配列とハッシュとシンボルについて整理してみた
...皆様、あけましておめでとうございます。
さて、2015年の初投稿は、私的に今最も熱いRubyネタで始めようかと思います。
まず基礎のおさらいとして、Rubyにおける配列には一次元配列の
arrayクラスオブジェクトと多次元配列(連想配列)であるhashクラスオブジェクトの二種類があります。それぞれの配列オブジェクトは定義する際に要素を囲い込むリテラル記号によって以下のように区別されています。array = ["A", "B", "C"] # 配列変数arrayを定義 hash1 = {:first => "A", :second => "B", :third => "C"} # ハッシュhash1を定義一次元配列である
arrayクラスオブジェクトは各要素値に数値添字が自動で割り振られるため、数値添字のインデックスにて各要素にアクセスができます。array = ["A", "B", "C"] puts array[0] # "A"が表示される一方
hashクラスオブジェクトはキー・バリュー型のオブジェクトなので、文字列型の添字(キー)で要素値にアクセスができます。hash2 = {"first" => "A", "second" => "B", "third" => "C"} puts hash2["first"] # "A"が表示されるさて、ここで一番最初の例で定義したhash1とhash2では、キーの指定の仕方が異なっていることに気づきましたでしょうか? hash1とhash2は要素値こそ一緒ですが、キーが異なるため同じハッシュではありません。
puts hash1 == hash2 # falseになりますhash1は ハッシュキーがシンボルになっているハッシュで、hash2は文字列をキーとするハッシュであるため、それぞれ異なるハッシュとなります。なお、ハッシュのキーはシンボルであろうが文字列であろうがハッシュ内でユニークである必要があります。また、文字列キーとシンボルを同名で混在させた場合、それぞれの要素が別のものとして扱われます。