你好,我是富士大顆 Aiko
今天來介紹 hash 的常見 methods!
As usual, let's talk about what Hash is.
{}
& symbol
& =>
:古典寫法,使用 symbol 為 key 。例如:
hash = { :name => "Aiko", :age => 33 }
{}
& :
:現代寫法,省略 =>
符號,例如:
hash = { name: "Aiko", age: 33 }
#這裡看起來 name 不是 :name 但其實是 symbol!!
#所以要查找要這樣 puts _hash[:name]
profile = Hash.new("Unknown")
#預設值是"Unknown"
profile["name"] = "Aiko"
profile["age"] = 33
把key"name"&"age"的 value 放進 hash 裡
puts profile["name"] #"Aiko"
puts profile["age"] #33
# access to those keys
puts profile.keys
#["name", "age"]
#profile 這個 hash 裡面並沒有 "gender"這個 key
puts profile["gender"]
#"Unknown"
總結,以下是一個操作 hash 的範例:
# 創建 hash
person = { name: "Aiko", age: 33, city: "Osaka" }
# access keys
puts person[:name] #"Aiko"
puts person[name] #這樣寫會錯!!!
puts person[:age] #33
puts person[age] #這樣寫會錯!!!
# 增加新的一組 key&value
person[:occupation] = "Engineer"
# 迭代.each 的使用
person.each do |key, value|
puts "#{key}: #{value}"
end
# name: Aiko
# age: 33
# city: Osaka
# occupation: Engineer
update(other_hash)
: 更新 hash 中的 key&value。
hash = { name: "Aiko", age: 33 }
puts hash.update({ age: 18 }) # 更新年龄
#{ :name => "Aiko", :age => 18 }
transform_keys(&block)
: 使用指定的操作轉換所有的 key。會創造新 hash
hash = { name: "Aiko", age: 33 }
puts hash.transform_keys { |key| key.to_s }
#{ "name" => "Aiko", "age" => 33 }
merge(other_hash)
: 合併兩個 hash。會創造新 hash
hash1 = { name: "Aiko", age: 33 }
hash2 = { city: "Osaka", country: "Japan" }
puts hash1.merge(hash2)
#{ :name => "Aiko", :age => 33, :city => "Osaka", :country => "Japan" }
delete(key)
: 刪除指定的 key&value。
hash = { name: "Aiko", age: 33 }
puts hash.delete(:age)
#{ :name => "Aiko" }
clear
: 清空 hash 的所有 key&value。
hash = { name: "Aiko", age: 33 }
puts hash.clear
#{}
keys
: 回傳所有的 key。是為陣列形式
hash = { name: "Aiko", age: 33 }
puts hash.keys
#[:name, :age]
values
: 回傳所有的值。
hash = { name: "Aiko", age: 33 }
puts hash.values
#["Aiko", 33]
size
或 length
: 回傳 hash 中鍵值對的數量。
hash = { name: "Aiko", age: 33 }
puts hash.size
#2
fetch(key, default)
: 根據鍵索引值,如果鍵不存在則回傳預設值。
hash = { name: "Aiko", age: 33 }
puts hash.fetch(:gender, "Unknown") # 如果不存在"gender"键,回傳"Unknown"
#"Unknown"
select
: 回傳符合條件的 key&value。
hash = { name: "Aiko", age: 33, city: "Osaka" }
puts hash.select { |key, value| value.is_a?(String) }
#{ :name => "Aiko", :city => "Osaka" }
reject
: 回傳不符合條件的 key&value。
hash = { name: "Aiko", age: 33, city: "Osaka" }
puts hash.reject { |key, value| value.is_a?(String) }
#.is_a?(資料類型)是 ruby 裡的檢查 method
#{ :age => 33 }
has_key?(key)
&key?(key)
: 檢查是否存在指定的鍵。
hash = { name: "Aiko", age: 33 }
puts hash.has_key?(:name)
#true
has_value?(value)
&value?(value)
: 檢查是否存在指定的值。
hash = { name: "Aiko", age: 33 }
puts hash.has_value?(33)
#true
empty?
: 檢查 hash 是否為空。
empty_hash = {}
non_empty_hash = { name: "Aiko" }
puts empty_hash.empty?
puts non_empty_hash.empty?
#true
#false
invert
: 將 key&value 互換。
hash = { name: "Aiko", age: 33 }
puts hash.invert
#{ "Aiko" => :name, 33 => :age }
to_a
: 將哈希轉換為包含 key&value 的陣列。
hash = { name: "Aiko", age: 33 }
puts hash.to_a
#[[:name, "Aiko"], [:age, 33]]
keys.each
: 迭代所有的鍵。
hash = { name: "Aiko", age: 33 }
hash.keys.each do {|key| puts key}
end
#:name
#:age
values.each
: 迭代所有的值。
hash = { name: "Aiko", age: 33 }
hash.values.each do {|value| puts value }
end
#"Aiko"
#33
很好,下一篇我們來透過面試題,來更進一步了解 Ruby 吧!