7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby初心者が押さえておいたほうがいい シンボル、文字列、ハッシュの関係

Posted at

ハッシュキーに文字列を使ってるのか、シンボルを使ってるのか、ちゃんと区別しといたほうがいい

最近ちょっと悩んだ、ハッシュのキーに関して

irb > { 'my-key' => '111' } == { 'my-key': '111' }
# => false

で、「え!!?」となって驚いた話。

{ 'my-key' => '111' }

文字列 'my-key' をキーとするハッシュ

{ 'my-key': '111' }

シンボル :'my-key' をキーとするハッシュ

ハイフンやスペースが入った文字列をハッシュのキーにしたい時

ハイフンやスペースが入ってる場合、前置きコロンでサクッとシンボルにできない。

{ 'my-key': '111' } みたいにわざわざシンボルに変換せず、文字列のまま使ったほうがわかりやすい。

あとでアクセスする時もキーが:'my-key'になっちゃってややこしいから・・


ここから、自分的復習ポイント。

ハッシュのキーはシンボルと文字列を区別している

「シンボルと文字列は違う」ため、ハッシュのキーとして使うときに区別される。

irb> hash1 = { "one" => "uno", "two" => "dos" }
=> {"one"=>"uno", "two"=>"dos"}
irb> hash2 = { :one => "uno", :two => "dos" }
=> {:one=>"uno", :two=>"dos"}
irb0> hash1 == hash2
=> false
irb> hash1["one"]
=> "uno"
irb> hash1[:one]
=> nil

hash1は文字列がキーに、hash2はシンボルがキー。
hash1の値を取りたいときに、シンボルの :one を渡しても取れない。(シンボルと文字列は違うものだから)

ハッシュの省略記法

ハッシュにはよく シンボルがキーとして使われる ため、 Ruby1.9より省略記法が導入されている。

irb> hash3 = { one: "uno", two: "dos" }
=> {:one=>"uno", :two=>"dos"}
irb> hash2 == hash3
=> true

後ろコロン・・・
これは、 シンボルをキーとしたハッシュを作るための省略記法


機械的に、「ハッシュ作る時のキーは後ろコロン」だけ覚えてたら、最初に書いた問題にぶち当たった。
後ろコロンで作られたハッシュのキーはシンボルである。
ハイフンやスペースが入ったサクッとシンボルにならない文字列の場合、ややこしくなるので、文字列のまま { 'my-key' => '111' } とするのが吉。

7
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?