Chiayin's blog

【2020 12th鐵人賽】Ruby名詞解釋總匯 - Day 7 : Ruby中的「Hash」

字數統計: 663閱讀時間: 2 min
2022/10/30

https://ithelp.ithome.com.tw/upload/images/20200914/20129424BKqGzGi7pf.png

雜湊 Hash

*英文發音
首先來聽聽英文發音~。
Yes

名詞解釋

Hash是由Key、Value所組成的資料,設計者只要根據Key值就可以取得相對應的資料唷!
雖然中文翻譯很奇怪,不過大家都是這麼稱呼的,實務上使用都是講hash。

如何建立hash?

  1. 使用hash類別,new一個給他。
    1
    vegan = Hash.new
  2. 使用大括號
    1
    2
    3
    4
    5
    vegan = {}

    # EX:
    vegan = { name: 'Lisa', age:8 }
    p vegan -> { :name => "Lisa", :age => 8 }

ruby的hash有多種寫法?

  • 舊式:箭頭式。

    1
    2
    3
    4
    5
    # 字串寫法
    vegan = { 'name' => "Lisa", 'age' => 8 }

    # 符號寫法
    vegan = { :name => "Lisa", :age => 8 }

    但之前的章節說過使用「字串」的效能沒有「符號」好,所以這邊使用「符號」為主。

  • 新式:Ruby 1.9版本之後的新式寫法,設計為現代、較類似JSON風格的寫法,給設計者方便的一種寫法。

    1
    vegan = { name: 'Lisa', age:8 }

*該選擇哪一個版本的寫法呢?
Ans:事實上使用舊式或新式寫法都可以,文件格式統一即可。

如何取出key或value的值?

因為hash是key跟value的組合,所以可以單獨使用方法來印出。

1
2
p vegan.keys # 印出 [:name, :age]
p vegan.values # 印出 ["Lisa", 8]

印出來的是舊式的寫法,因為本質上是舊式的。

*索引號碼
若是之前學過別的程式語言會不習慣ruby的方式,在ruby要用對的key才能拿到value。

例如想要拿到kk

1
2
p vegan["name"] # 別的程式語言,印出 nil
p vegan[:name] # Ruby 印出 "Lisa"

修改key的值怎麼做

1
2
3
vegan = { name: 'Lisa', age:8 }
vegan[:name] = 'Jon'
p vegan # 印出來 { name:'Jon', age:8}

使用each,將資料一個個印出來。

1
2
3
vegan.each do |element|
p vegan
end

多一個變數的寫法

1
2
3
4
vegan.each do |key, value|
puts key
puts value
end

更多的使用方法依樣可以參考手冊唷!
Hash 官方手冊


回家作業

請依官方手冊回答以下題目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
hash_one = { a:37 , b:42 }
hash_two = { a:55 , c:77 }
hash_three = { a:66 , d:89}

1. 請印出以下結果。
a is 37
b is 42

2. 請印出以下結果。
{ a:55, b:42, c:77}

3. 請印出以下結果
{ a:37, b:42, c:77, d:89 }

參考答案

1
2
3
4
5
1. hash.each do { |key, value| puts "#{key} is #{value}" }

2. hash_one.merge!(hash_two)

3. hash_one.merge!(hash_two,hash_three){ |key, v1, v2| v1 }

參考資料

本文於 2020-09-14 發表在舊網站。

發佈日期:2022-10-30

更新日期:2022-10-30

CATALOG
  1. 1. 雜湊 Hash
    1. 1.1. 名詞解釋
    2. 1.2. 如何建立hash?
    3. 1.3. ruby的hash有多種寫法?
    4. 1.4. 如何取出key或value的值?
    5. 1.5. 修改key的值怎麼做
    6. 1.6. 使用each,將資料一個個印出來。
  2. 2. 回家作業
    1. 2.1. 參考答案
  3. 3. 參考資料