- Ruby 基礎
- Ruby - 首頁
- Ruby - 概述
- Ruby - 環境搭建
- Ruby - 語法
- Ruby - 類和物件
- Ruby - 變數
- Ruby - 運算子
- Ruby - 註釋
- Ruby - IF...ELSE
- Ruby - 迴圈
- Ruby - 方法
- Ruby - 塊
- Ruby - 模組
- Ruby - 字串
- Ruby - 陣列
- Ruby - 雜湊表
- Ruby - 日期和時間
- Ruby - 範圍
- Ruby - 迭代器
- Ruby - 檔案 I/O
- Ruby - 異常
Ruby - 雜湊表
雜湊表是一個鍵值對的集合,例如:"employee" => "salary"。它類似於陣列,但索引是透過任意型別的物件鍵進行的,而不是整數索引。
透過鍵或值遍歷雜湊表的順序可能看起來是任意的,通常不會按照插入順序排列。如果嘗試使用不存在的鍵訪問雜湊表,則方法將返回nil。
建立雜湊表
與陣列一樣,建立雜湊表的方法有很多種。可以使用new類方法建立一個空雜湊表:
months = Hash.new
也可以使用new建立一個具有預設值的雜湊表,否則預設為nil:
months = Hash.new( "month" ) or months = Hash.new "month"
當訪問具有預設值的雜湊表中的任何鍵時,如果鍵或值不存在,訪問雜湊表將返回預設值:
#!/usr/bin/ruby
months = Hash.new( "month" )
puts "#{months[0]}"
puts "#{months[72]}"
這將產生以下結果:
month month
#!/usr/bin/ruby
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"
這將產生以下結果:
100 200
可以使用任何 Ruby 物件作為鍵或值,甚至可以使用陣列,因此以下示例是有效的:
[1,"jan"] => "January"
雜湊表內建方法
我們需要一個雜湊表物件例項才能呼叫雜湊表方法。如我們所見,以下是如何建立一個雜湊表物件例項:
Hash[[key =>|, value]* ] or
Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }
這將返回一個使用給定物件填充的新雜湊表。現在使用建立的物件,我們可以呼叫任何可用的例項方法。例如:
#!/usr/bin/ruby
$, = ", "
months = Hash.new( "month" )
months = {"1" => "January", "2" => "February"}
keys = months.keys
puts "#{keys}"
這將產生以下結果:
["1", "2"]
以下是公共雜湊表方法(假設hash是一個數組物件):
| 序號 | 方法和描述 |
|---|---|
| 1 | hash == other_hash 測試兩個雜湊表是否相等,基於它們是否具有相同數量的鍵值對,以及鍵值對是否與每個雜湊表中對應的對匹配。 |
| 2 | hash.[key] 使用鍵從雜湊表中引用值。如果找不到鍵,則返回預設值。 |
| 3 | hash.[key] = value 將value給出的值與key給出的鍵關聯。 |
| 4 | hash.clear 刪除雜湊表中的所有鍵值對。 |
| 5 | hash.default(key = nil) 返回hash的預設值,如果未由default=設定,則返回nil。([]如果鍵在hash中不存在,則返回預設值。) |
| 6 | hash.default = obj 設定hash的預設值。 |
| 7 | hash.default_proc 如果hash是由塊建立的,則返回一個塊。 |
| 8 | hash.delete(key) [或] array.delete(key) { |key| block } 透過key從hash中刪除鍵值對。如果使用塊,則如果找不到對,則返回塊的結果。比較delete_if。 |
| 9 | hash.delete_if { |key,value| block } 對於塊計算結果為true的每個對,從hash中刪除鍵值對。 |
| 10 | hash.each { |key,value| block } 迭代hash,為每個鍵呼叫一次塊,並將鍵值作為兩個元素的陣列傳遞。 |
| 11 | hash.each_key { |key| block } 迭代hash,為每個鍵呼叫一次塊,將key作為引數傳遞。 |
| 12 | hash.each_key { |key_value_array| block } 迭代hash,為每個key呼叫一次塊,將key和value作為引數傳遞。 |
| 13 | hash.each_key { |value| block } 迭代hash,為每個key呼叫一次塊,將value作為引數傳遞。 |
| 14 | hash.empty? 測試雜湊表是否為空(不包含鍵值對),返回true或false。 |
| 15 | hash.fetch(key [, default] ) [或] hash.fetch(key) { | key | block } 返回hash中給定key的值。如果找不到key,並且沒有其他引數,則引發IndexError異常;如果給出了default,則返回它;如果指定了可選塊,則返回其結果。 |
| 16 | hash.has_key?(key) [或] hash.include?(key) [或] hash.key?(key) [或] hash.member?(key) 測試給定的key是否在雜湊表中,返回true或false。 |
| 17 | hash.has_value?(value) 測試雜湊表是否包含給定的value。 |
| 18 | hash.index(value) 返回雜湊表中給定value的key,如果找不到匹配的值,則返回nil。 |
| 19 | hash.indexes(keys) 返回一個新陣列,其中包含給定鍵的值。將為找不到的鍵插入預設值。此方法已棄用。使用select。 |
| 20 | hash.indices(keys) 返回一個新陣列,其中包含給定鍵的值。將為找不到的鍵插入預設值。此方法已棄用。使用select。 |
| 21 | hash.inspect 返回雜湊表的漂亮列印字串版本。 |
| 22 | hash.invert 建立一個新的hash,反轉hash中的keys和values;也就是說,在新雜湊表中,hash的鍵成為值,值成為鍵。 |
| 23 | hash.keys 建立一個包含hash鍵的新陣列。 |
| 24 | hash.length 返回hash的大小或長度(整數)。 |
| 25 | hash.merge(other_hash) [或] hash.merge(other_hash) { |key, oldval, newval| block } 返回一個新雜湊表,其中包含hash和other_hash的內容,用other_hash中的對覆蓋hash中具有重複鍵的對。 |
| 26 | hash.merge!(other_hash) [或] hash.merge!(other_hash) { |key, oldval, newval| block } 與merge相同,但更改是在原地進行的。 |
| 27 | hash.rehash 根據每個key的當前值重建hash。如果自插入以來值已更改,則此方法會重新索引hash。 |
| 28 | hash.reject { |key, value| block } 為block計算結果為true的每個對建立一個新的hash |
| 29 | hash.reject! { |key, value| block } 與reject相同,但更改是在原地進行的。 |
| 30 | hash.replace(other_hash) 將hash的內容替換為other_hash的內容。 |
| 31 | hash.select { |key, value| block } 返回一個新陣列,其中包含hash中block返回true的鍵值對。 |
| 32 | hash.shift 從hash中刪除一個鍵值對,並將其作為兩個元素的陣列返回。 |
| 33 | hash.size 返回hash的大小或長度(整數)。 |
| 34 | hash.sort 將hash轉換為包含鍵值對陣列的二維陣列,然後將其作為陣列排序。 |
| 35 | hash.store(key, value) 在hash中儲存鍵值對。 |
| 36 | hash.to_a 從雜湊表建立二維陣列。每個鍵/值對都轉換為陣列,所有這些陣列都儲存在一個包含陣列中。 |
| 37 | hash.to_hash 返回hash(自身)。 |
| 38 | hash.to_s 將hash轉換為陣列,然後將該陣列轉換為字串。 |
| 39 | hash.update(other_hash) [或] hash.update(other_hash) {|key, oldval, newval| block} 返回一個新雜湊表,其中包含hash和other_hash的內容,用other_hash中的對覆蓋hash中具有重複鍵的對。 |
| 40 | hash.value?(value) 測試hash是否包含給定的value。 |
| 41 | hash.values 返回一個包含hash所有值的新陣列。 |
| 42 | hash.values_at(obj, ...) 返回一個新陣列,其中包含與給定鍵關聯的hash值。 |