Ruby 哈希(Hash)

2022-09-27 10:20 更新

哈希(Hash)是類似 "employee" => "salary" 這樣的鍵值對的集合。哈希的索引是通過任何對象類型的任意鍵來完成的,而不是一個整數(shù)索引,其他與數(shù)組相似。

通過鍵或值遍歷哈希的順序看起來是隨意的,且通常不是按照插入順序。如果您嘗試通過一個不存在的鍵訪問哈希,則方法會返回 nil。

創(chuàng)建哈希

與數(shù)組一樣,有各種不同的方式來創(chuàng)建哈希。您可以通過 new 類方法創(chuàng)建一個空的哈希:

months = Hash.new

您也可以使用 new 創(chuàng)建帶有默認值的哈希,不帶默認值的哈希是 nil

months = Hash.new( "month" )
或
months = Hash.new "month"

當您訪問帶有默認值的哈希中的任意鍵時,如果鍵或值不存在,訪問哈希將返回默認值:

#!/usr/bin/ruby

months = Hash.new( "month" )

puts "#{months[0]}"
puts "#{months[72]}"
嘗試一下 ?

這將產(chǎn)生以下結果:

month
month
#!/usr/bin/ruby

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

puts "#{H['a']}"
puts "#{H['b']}"
嘗試一下 ?

這將產(chǎn)生以下結果:

100
200

您可以使用任何的 Ruby 對象作為鍵或值,甚至可以使用數(shù)組,所以下面的實例是一個有效的實例:

[1,"jan"] => "January"

哈希內置方法

我們需要有一個 Hash 對象的實例來調用 Hash 方法。下面是創(chuàng)建 Hash 對象實例的方式:

Hash[[key =>|, value]* ] or

Hash.new [or] Hash.new(obj) [or]

Hash.new { |hash, key| block }

這將返回一個使用給定對象進行填充的新的哈?!,F(xiàn)在,使用創(chuàng)建的對象,我們可以調用任意可用的實例方法。例如:

#!/usr/bin/ruby

$, = ", "
months = Hash.new( "month" )

months = {"1" => "January", "2" => "February"}

keys = months.keys

puts "#{keys}"
嘗試一下 ?

這將產(chǎn)生以下結果:

2, 1

下面是公共的哈希方法(假設 hash 是一個 Hash 對象):

序號 方法 & 描述
1 hash == other_hash
檢查兩個哈希是否具有相同的鍵值對個數(shù),鍵值對是否相互匹配,來判斷兩個哈希是否相等。
2 hash.[key]
使用鍵,從哈希引用值。如果未找到鍵,則返回默認值。
3 hash.[key]=value
value 給定的值與 key 給定的鍵進行關聯(lián)。
4 hash.clear
從哈希中移除所有的鍵值對。
5 hash.default(key = nil)
返回 hash 的默認值,如果未通過 default= 進行設置,則返回 nil。(如果鍵在 hash 中不存在,則 [] 返回一個默認值。)
6 hash.default = obj
hash 設置默認值。
7 hash.default_proc
如果 hash 通過塊來創(chuàng)建,則返回塊。
8 hash.delete(key) [or]
array.delete(key) { |key| block }

通過 keyhash 中刪除鍵值對。如果使用了塊 且未找到匹配的鍵值對,則返回塊的結果。把它與 delete_if 進行比較。
9 hash.delete_if { |key,value| block }
為 block 為 true 的每個塊,從 hash 中刪除鍵值對。
10 hash.each { |key,value| block }
遍歷 hash,為每個 key 調用一次 block,傳遞 key-value 作為一個二元素數(shù)組。
11 hash.each_key { |key| block }
遍歷 hash,為每個 key 調用一次 block,傳遞 key 作為參數(shù)。
12 hash.each_key { |key_value_array| block }
遍歷 hash,為每個 key 調用一次 block,傳遞 keyvalue 作為參數(shù)。
13 hash.each_key { |value| block }
遍歷 hash,為每個 key 調用一次 block,傳遞 value 作為參數(shù)。
14 hash.empty?
檢查 hash 是否為空(不包含鍵值對),返回 truefalse
15 hash.fetch(key [, default] ) [or]
hash.fetch(key) { | key | block }

通過給定的 keyhash 返回值。如果未找到 key,且未提供其他參數(shù),則拋出 IndexError 異常;如果給出了 default,則返回 default;如果指定了可選的 block,則返回 block 的結果。
16 hash.has_key?(key) [or] hash.include?(key) [or]
hash.key?(key) [or] hash.member?(key)

檢查給定的 key 是否存在于哈希中,返回 truefalse。
17 hash.has_value?(value)
檢查哈希是否包含給定的 value
18 hash.index(value)
為給定的 value 返回哈希中的 key,如果未找到匹配值則返回 nil
19 hash.indexes(keys)
返回一個新的數(shù)組,由給定的鍵的值組成。找不到的鍵將插入默認值。該方法已被廢棄,請使用 select。
20 hash.indices(keys)
返回一個新的數(shù)組,由給定的鍵的值組成。找不到的鍵將插入默認值。該方法已被廢棄,請使用 select。
21 hash.inspect
返回哈希的打印字符串版本。
22 hash.invert
創(chuàng)建一個新的 hash,倒置 hash 中的 keysvalues。也就是說,在新的哈希中,hash 中的鍵將變成值,值將變成鍵。
23 hash.keys
創(chuàng)建一個新的數(shù)組,帶有 hash 中的鍵。/td>
24 hash.length
以整數(shù)形式返回 hash 的大小或長度。
25 hash.merge(other_hash) [or]
hash.merge(other_hash) { |key, oldval, newval| block }

返回一個新的哈希,包含 hashother_hash 的內容,重寫 hash 中與 other_hash 帶有重復鍵的鍵值對。
26 hash.merge!(other_hash) [or]
hash.merge!(other_hash) { |key, oldval, newval| block }

與 merge 相同,但實際上 hash 發(fā)生了變化。
27 hash.rehash
基于每個 key 的當前值重新建立 hash。如果插入后值發(fā)生了改變,該方法會重新索引 hash。
28 hash.reject { |key, value| block }
blocktrue 的每個鍵值對創(chuàng)建一個新的 hash。
29 hash.reject! { |key, value| block }
reject 相同,但實際上 hash 發(fā)生了變化。
30 hash.replace(other_hash)
hash 的內容替換為 other_hash 的內容。
31 hash.select { |key, value| block }
返回一個新的數(shù)組,由 block 返回 truehash 中的鍵值對組成。
32 hash.shift
hash 中移除一個鍵值對,并把該鍵值對作為二元素數(shù)組返回。
33 hash.size
以整數(shù)形式返回 hashsize 或 length。
34 hash.sort
hash 轉換為一個包含鍵值對數(shù)組的二維數(shù)組,然后進行排序。
35 hash.store(key, value)
存儲 hash 中的一個鍵值對。
36 hash.to_a
從 hash 中創(chuàng)建一個二維數(shù)組。每個鍵值對轉換為一個數(shù)組,所有這些數(shù)組都存儲在一個數(shù)組中。
37 hash.to_hash
返回 hash(self)。
38 hash.to_s
hash 轉換為一個數(shù)組,然后把該數(shù)組轉換為一個字符串。
39 hash.update(other_hash) [or]
hash.update(other_hash) {|key, oldval, newval| block}

返回一個新的哈希,包含 hashother_hash 的內容,重寫 hash 中與 other_hash 帶有重復鍵的鍵值對。
40 hash.value?(value)
檢查 hash 是否包含給定的 value
41 hash.values
返回一個新的數(shù)組,包含 hash 的所有值。
42 hash.values_at(obj, ...)
返回一個新的數(shù)組,包含 hash 中與給定的鍵相關的值。
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號