啊,十天後,我們來到了書的第70頁(整本書有455頁),其實進度有點緩慢Orz 不過還是秉持著第8天的小語: 『Keep moving forward. One step at a time.』,不急,只要我繼續往前進,一次一步慢慢扎穩就好!
好的,來談談Ruby中非常重要的一環:雜湊(Hash)。
『雜湊(Hash)是一種資料結構,其中保存了一組稱為鍵(key)的物件,而且每個鍵都會被關聯到一個值(value)。雜湊也被稱為對映表,因為它會將鍵對應至值。雜湊有時會被稱為關聯陣列(associative array),因為每個鍵都會被關聯到一個值,所以可將它視為以任何物件(而非整數)為索引值的陣列。』
上面的文字完全來自於書本中,雖然讀起來有點跳針XD,但你不得不說,重要的事情會被說三次,你看到上面這段什麼東西出現三次了嗎XD?
『每個鍵都會被關聯到一個值』!!!
『因為它會將鍵對應至值』!!!
『因為每個鍵都會被關聯到一個值』!!!
是的!不管你要叫它什麼名字,它有一個特大重點:在雜湊中,有一個鍵(key)會對到一個值(value)! 馬上來看個例子:
rank = { "非常喜歡" => 5, "很喜歡" => 4, "沒感覺" => 3, "很討厭" => 2, "非常討厭" =>1 }
上面這個雜湊是以大括號 { }
包起來,其中,鍵(key)指的是"非常喜歡"、"很喜歡"、"沒感覺"、"很討厭"、"非常討厭",而值(value)指的是5、4、3、2、1。
以下三種寫法都是雜湊的寫法:
rank1 = { "非常喜歡" => 5, "很喜歡" => 4, "沒感覺" => 3, "很討厭" => 2, "非常討厭" =>1 }
rank2 = { :非常喜歡 => 5, :很喜歡 => 4, :沒感覺 => 3, :很討厭 => 2, :非常討厭 =>1 }
rank3 = { 非常喜歡: 5, 很喜歡: 4, 沒感覺: 3, 很討厭: 2, 非常討厭: 1 }
把上面這三行拿去irb 執行後可以看到:
rank1
=> {"非常喜歡"=>5, "很喜歡"=>4, "沒感覺"=>3, "很討厭"=>2, "非常討厭"=>1}
rank2
=> {:非常喜歡=>5, :很喜歡=>4, :沒感覺=>3, :很討厭=>2, :非常討厭=>1}
rank3
=> {:非常喜歡=>5, :很喜歡=>4, :沒感覺=>3, :很討厭=>2, :非常討厭=>1}
有注意到嗎?其實rank2 與rank3 執行結果是完全相同的!rank3 的寫法是ruby1.9 之後才支援的寫法,這種寫法比較簡潔方便。但更要注意的是, "非常喜歡" 和 :非常喜歡 是完全不同的兩種key喔!以下來證明兩種完全不同(數學老師上身):
#如果我們想把rank2中的 :非常喜歡 的值從5改成100,我們可以這樣寫:
rank2[:非常喜歡] = 100
#此時rank2變成:
=> {:非常喜歡=>100, :很喜歡=>4, :沒感覺=>3, :很討厭=>2, :非常討厭=>1}
#但如果我的改法是這樣寫:
rank2["非常喜歡"] = 555
#此時rank2變成:
=> {:非常喜歡=>100, :很喜歡=>4, :沒感覺=>3, :很討厭=>2, :非常討厭=>1, "非常喜歡"=>555}
如果它找得到相同的key,會直接改掉原本key的值,但是因為他找不到相同的key,所以就在最後面新增了一組key和value。
由上述可知"非常喜歡"
與:非常喜歡
是完全不同的兩種key,得證XD!
事實上,如果你要比較兩個雜湊的鍵到底有沒有一樣,也可以使用.eql?
這個方法,例如:
a = {:love =>5, :hate =>0} => {:love=>5, :hate=>0}
b = {"love" =>5, "hate" =>0} => {"love"=>5, "hate"=>0}
a.eql?b => false
再次證明這是不一樣的雜湊喔!
其實有個更重要的議題是,字串 " "
跟符號 :
的差異是什麼?好像不太能用一兩句話說清楚,這個書中在本章節最後面有提,到時候會一併說明!
第十一天,
Believe in yourself.
加油!