Hash
是資料的集合,由 Key
跟 Value
組成,像字典的概念,使用關鍵字
( Key )會查到相對應的資料
( Value )
hash_old_way = { :name => 'Luffy', :age => 19 } # 舊式寫法
hash_new_way = { name: 'Luffy', age: 19 } # 新式寫法(Ruby 1.9版後)
p hash_old_way
#印出 {:name=>"Luffy", :age=>19}
p hash_new_way
#印出 {:name=>"Luffy", :age=>19}
雖然有分新舊寫法,其實新式寫法只是語法糖衣
,本質並沒有改變。
reward_list = {name: "魯夫", age: 19, bounty: "30億貝里" }
# 拿到名字
puts reward_list[:name] # 印出 魯夫
# 拿到所有的keys
p reward_list.keys # 印出 [:name, :age, :bounty]
#拿到所有的values
p reward_list.values # 印出 ["魯夫", 19, "30億貝里"]
在rails 專案可能會出現以下範例,這裡的 :profile
:posts
就是表示符號。
class User < ApplicationRecord
has_one :profile
has_many :posts
end
符號就是帶有名字物件
也可以說是一個值,同時符號也有著不可變的特性。
p :hi # 印出 :hi
p 666 # 印出 666
:name = "Luffy" # 會報錯,因為符號是一個值
字串的內容是可以修改的,但是符號不能!
fruit = "橡膠果實"
fruit.gsub!("橡膠果實", "人人果實") #使用gsub方法重新賦值
puts fruit # 印出 人人果實
符號的效能會比字串好一點,同個程式裡每次字串印出來的object_id
都會不同,而符號則是相同的object_id
# 在同一個程式裡
p "hi".object_id # 印出 740
p "hi".object_id # 印出 760
p "hi".object_id # 印出 780
p :hi.object_id # 印出 1877148
p :hi.object_id # 印出 1877148
p :hi.object_id # 印出 1877148
小知識:在 Ruby 中,數字的 object_id 都是用 2n+1
的方法,所以怎麼印都會是相同的 object_id
p 1.object_id # 印出 3
p 1.object_id # 印出 3
p 1.object_id # 印出 3
p 2.object_id # 印出 5
p 2.object_id # 印出 5
p 2.object_id # 印出 5
p 10.object_id # 印出 21
p 10.object_id # 印出 21
p 10.object_id # 印出 21
字串跟符號的相互轉換:
字串轉符號
可以使用 to_sym
或是 intern
方法符號轉字串
可以使用 to_s
或是 id2name
方法
字串跟符號的使用時機:
不可改變-選符號
可以改變-選字串
Day 06 預計來介紹邏輯判斷與流程控制,我們明天見!