第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Ruby 的哈希

本章節(jié)我們學習另外一個可以組合多個的對象類——哈希,了解哈希是什么,如何創(chuàng)建一個哈希以及哈希對象的實例方法。

1. 什么是哈希

哈希是鍵值對的集合?!?官方定義

哈希是另一種非常有用且廣泛使用的東西,可用于存儲其他對象。與僅作為列表的數(shù)組不同,哈希表就像字典。我們通過鍵(key)來查找哈希中的值(value)。好比我們有一個英漢詞典,我們通過查找“hello的單詞來找到中文意思"你好",此時,“hello“就是作為鍵,而“你好”就是值。

我們將哈希的每一對鍵和值稱為鍵值對,每一個哈??梢該碛腥我鈹?shù)量的鍵值對。

2. 如何創(chuàng)建一個哈希

與數(shù)組一樣,哈希有很多創(chuàng)建方法,我們可以通過哈希所屬 Hash 類中的new方法來創(chuàng)建一個空的哈希。

實例:

> Hash.new
=> {}

我們也可以在創(chuàng)建哈希的時候為它賦予初始值:

實例:

> H = Hash["a" => 100, "b" => 200]
=> {"a"=>100, "b"=>200}

在 Ruby 中,我們通過使用=>將鍵分配給值來創(chuàng)建哈希,用逗號分隔多個鍵值對,并用花括號將整個內容括起來。

實例:

> a = { "one" => "1", "two" => "2", "three" => "3" }
=> {"one"=>"1", "two"=>"2", "three"=>"3"}

解釋:這是一個定義了3個鍵值對的哈希,我們可以通過 one,來找到 1,通過 two 來找到 2,也可以通過three 來找到 3。

我們更多使用標志對象(Symbol)或者字符串對象(String)來作為哈希的鍵。不過我們記住一點:哈希的鍵和值可以是任意類型的對象。

實例:

{ 1 => "eins", 2 => "zwei", 3 => "drei" }
{ :one => "eins", :two => "zwei", :three => "drei" }
{ "weights" => ["pound", "kilogram"], "lengths" => ["meter", "mile"] }
{ :de => { :one => "eins", :two => "zwei", :three => "drei" } }

解釋:

  • 第一個實例使用數(shù)字類型作為鍵,第二個則使用標志類型作為鍵;

  • 第三個實例我們看到它的值是一個數(shù)組;

  • 第四個示例我們得到一個嵌套的哈希,在哈希中我們還可以將鍵對應的值設置成另一個哈希。

Tips : 關于格式化:請注意,兩側的花括號內,=>周圍以及每個逗號后都有一個空格。

經(jīng)驗:

標志對象(Symbol)作為鍵時,我們會經(jīng)常使用一個新的寫法,而不是使用火箭(=>),這種寫法更貼近與 JSON 的寫法。

實例:

{ one: "eins", two: "zwei", three: "drei" }

# 與這種方法創(chuàng)建哈希是等價的
{ :one => "eins", :two => "zwei", :three => "drei" }

這種寫法會讓 Ruby 將鍵解釋為 Symbol。

3. 哈希的實例方法

3.1 查找值

我們使用[]方法,通過傳入鍵來查找對應的值。

實例:

# 定義一個哈希
dictionary = { "one" => "eins", "two" => "zwei", "three" => "drei" }
puts dictionary["one"]

# ---- 輸出結果 ----
"eins"

當我們查找的鍵沒有對應內容時,會返回一個nil

實例:

puts dictionary["four"]

# ---- 輸出結果 ----
nil

另外我們很少會用到一個fetch方法,他和[]方法一樣都可以查找某一個鍵的值,但是如果鍵對應的值不存在,會拋出異常。

實例:

puts dictionary.fetch("one")

# ---- 輸出結果 ----
"eins
puts dictionary.fetch("four")

# ---- 輸出結果 ----
KeyError (key not found: "four")

3.2 更改某一個鍵對應的值

使用[]=方法,傳入鍵與更改的值:

實例:

# 定義一個哈希
dictionary = { "one" => "eins", "two" => "zwei", "three" => "drei" }
# 更改one對應的值
dictionary["one"] = "uno"
puts dictionary

# ---- 輸出結果 ----
{"one"=>"uno", "two"=>"zwei", "three"=>"drei"}

您還可以通過這種方法為哈希增加鍵值對:

實例:

dictionary["zero"] = "null"
puts dictionary

# ---- 輸出結果 ----
{"one"=>"null", "two"=>"zwei", "three"=>"drei", "zero"=>"null"}

3.3 合并兩個哈希

使用merge方法。

實例:

a = { "one" => "eins" }
b = { "two" => "zwei" }
puts a.merge(b)
puts a 

# ---- 輸出結果 ----
{"one"=>"eins", "two"=>"zwei"}
{"one" => "eins"}

Tips : merge!方法會在合并的同時,將結果賦值給原有的哈希,而merge方法不會改變原有的哈希。

實例:

a = { "one" => "eins" }
b = { "two" => "zwei" }
puts a.merge(b)
puts a

# ---- 輸出結果 ----
{"one"=>"eins", "two"=>"zwei"}
{"one"=>"eins", "two"=>"zwei"}

3.4 獲得哈希擁有的所有鍵

keys返回一個帶有哈希知道的所有鍵的數(shù)組:

實例:

# 定義一個哈希
dictionary = { "one" => "eins", "two" => "zwei", "three" => "drei" }
dictionary.keys

# ---- 輸出結果 ----
["one", "two", "three"]

3.5 獲得哈希擁有的所有值

values返回一個帶有哈希所有值的數(shù)組:

# 定義一個哈希
dictionary = { "one" => "eins", "two" => "zwei", "three" => "drei" }
dictionary.values

# ---- 輸出結果 ----
["eins", "zwei", "drei"]

3.6 判斷是不是空哈希

使用empty?

實例:

{}.empty?

# ---- 輸出結果 ----
true

或者使用size或者length方法,判斷哈希的大小是否為0。

實例:

dictionary = { "one" => "eins", "two" => "zwei", "three" => "drei" }
puts dictionary.size == 0
puts dictionary.length == 0

# ---- 輸出結果 ----
false
false

3.7 刪除一個鍵值對

通過delete,并傳入要刪除的鍵作為參數(shù)。

dictionary = { "one" => "eins", "two" => "zwei", "three" => "drei" }
dictionary.delete("one")
puts dictionary

# ---- 輸出結果 ----
{"two"=>"zwei", "three"=>"drei"}

如果鍵不存在,則不會進行操作。

4. 小結

本章中我們學習了如何創(chuàng)建一個哈希,通過哈希如何查找值、替換值、增加值,合并哈希、刪除鍵值對、獲得哈希鍵或值的數(shù)組、判斷是否為空。