Ruby入門——哈希表


哈希表(hash)是使用將某一任意對象作為鍵來對應其他對象的容器對象,相當於C++或Java中的映射。

例1

month_to_ordinal = {
"Jan" =>1, "Feb" =>2, "Mar" =>3, "Apr" =>4, "May" =>5, "Jun" =>6, "Jul" =>7, "Aug" =>8, "Sep" =>9, "Oct" =>10, "Nov" =>11, "Dec" =>12
}

p month_to_ordinal["Aug"]
p month_to_ordinal["Sep"]

#輸出結果
#8
#9

創建哈希表

要生成哈希表只需將鍵和值得對應關系排列在花括號內就可以了。

例2

prefix = "yapoo-"
abbr = {
"CAT" => "Condensed-Abridged Tiger", "Yapomb" => prefix + "womb", "pilk" => prefix + "milk"
}

p abbr["CAT"]
p abbr["Yapomb"]
p abbr["pilk"]


#輸出結果
#"Condensed-Abridged Tiger"
#"yapoo-womb"
#"yapoo-milk"

更簡單的表示方法,使用符號“:”

例3

params = {rin: 5, kimiko: 7, Kayo:nil}
p params
p params[:rin]
p params[:kimiko]
p params[:Kayo]


#輸出結果
#{:rin=>5, :kimiko=>7, :Kayo=>nil}
#5
#7
#nil

索引運算符表達式

例4

book_to_author = {
	"Ruby in Nutshell" => "Flanagan", 
	"Programming in Ruby" => "Thomas", 
	"AWDwr" => "Thomas"
}

p book_to_author["Programming in Ruby"]
p book_to_author["Programming in Perl"]
#更新已有的鍵值
p book_to_author["Ruby in Nutshell"] = ["Flanagan", "Matz"]
#添加新的鍵值
p book_to_author["The Ruby Way"] = "Fulton"


#輸出結果
#"Thomas"
#nil
#["Flanagan", "Matz"]
#"Fulton"

哈希表的比較

hash對象之間,只有對象中所有對應的元素間的鍵和值都相等時才相等,但和順序無關。

例5

hash1 = {"a" => 1, "b" =>2}
hash2 = {"a" => 1, "b" =>2}
p hash1 == hash2

#和順序無關,相等
p hash1 == {"b" => 2, "a" =>1}
#值不一樣,所以不相等
p hash1 == {"a" => 9, "b" =>2}
#鍵不一樣,所以不相等
p hash1 == {"z" => 1, "b" =>2}
#有多余的內容,所以不相等
p hash1 == {"a" => 1, "b" =>2, "c" => 3}

#輸出結果
#true
#true
#false
#false
#false

哈希表的其它方法

例6

book_to_author = {
	"Ruby in Nutshell" => "Flanagan", 
	"Programming in Ruby" => "Thomas", 
	"AWDwr" => "Thomas"
}

#size方法
p book_to_author.size

#用hash#each方法對哈希表的元素進行處理
book_to_author.each do |book, author|
	puts "#{book} by #{author}"
end

#hash#map會將代碼塊返回的值作為數組返回
p book_to_author.map{|book, author|  "#{book} by #{author}"}
#輸出結果
#3
#Ruby in Nutshell by Flanagan
#Programming in Ruby by Thomas
#AWDwr by Thomas#["Ruby in Nutshell by Flanagan", "Programming in Ruby by Thomas", "AWDwr by Thomas"]

Enumerable模塊

數組和哈希表之間除了map還有很多類似的方法,這是因為不論是數組還是哈希表,都同屬於Enumerable這個模塊。 Array和Hash都繼承了Enumerable。

模塊是為了讓沒有共同的繼承的類擁有共同的實現而使用的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM