1. 程式人生 > >雷林鵬分享:Ruby 雜湊(Hash)

雷林鵬分享:Ruby 雜湊(Hash)

  Ruby 雜湊(Hash)

  雜湊(Hash)是類似 "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 物件的例項來呼叫 Hash 方法。下面是建立 Hash 物件例項的方式:

  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}"

  這將產生以下結果:

  2, 1

  下面是公共的雜湊方法(假設 hash 是一個 Hash 物件):

  序號方法 & 描述

  1hash == other_hash

  檢查兩個雜湊是否具有相同的鍵值對個數,鍵值對是否相互匹配,來判斷兩個雜湊是否相等。

  2hash.[key]

  使用鍵,從雜湊引用值。如果未找到鍵,則返回預設值。

  3hash.[key]=value

  把 value 給定的值與 key 給定的鍵進行關聯。

  4hash.clear

  從雜湊中移除所有的鍵值對。

  5hash.default(key = nil)

  返回 hash 的預設值,如果未通過 default= 進行設定,則返回 nil。(如果鍵在 hash 中不存在,則 [] 返回一個預設值。)

  6hash.default = obj

  為 hash 設定預設值。

  7hash.default_proc

  如果 hash 通過塊來建立,則返回塊。

  8hash.delete(key) [or]

  array.delete(key) { |key| block }

  通過 key 從 hash 中刪除鍵值對。如果使用了塊 且未找到匹配的鍵值對,則返回塊的結果。把它與 delete_if進行比較。

  9hash.delete_if { |key,value| block }

  為 block 為 true 的每個塊,從 hash 中刪除鍵值對。

  10hash.each { |key,value| block }

  遍歷 hash,為每個 key 呼叫一次 block,傳遞 key-value 作為一個二元素陣列。

  11hash.each_key { |key| block }

  遍歷 hash,為每個 key 呼叫一次 block,傳遞 key 作為引數。

  12hash.each_key { |key_value_array| block }

  遍歷 hash,為每個 key 呼叫一次 block,傳遞 key 和 value 作為引數。

  13hash.each_key { |value| block }

  遍歷 hash,為每個 key 呼叫一次 block,傳遞 value 作為引數。

  14hash.empty?

  檢查 hash 是否為空(不包含鍵值對),返回 true 或 false。

  15hash.fetch(key [, default] ) [or]

  hash.fetch(key) { | key | block }

  通過給定的 key 從 hash 返回值。如果未找到 key,且未提供其他引數,則丟擲 IndexError 異常;如果給出了 default,則返回 default;如果指定了可選的 block,則返回 block 的結果。

  16hash.has_key?(key) [or] hash.include?(key) [or]

  hash.key?(key) [or] hash.member?(key)

  檢查給定的 key 是否存在於雜湊中,返回 true 或 false。

  17hash.has_value?(value)

  檢查雜湊是否包含給定的 value。

  18hash.index(value)

  為給定的 value 返回雜湊中的 key,如果未找到匹配值則返回 nil。

  19hash.indexes(keys)

  返回一個新的陣列,由給定的鍵的值組成。找不到的鍵將插入預設值。該方法已被廢棄,請使用 select。

  20hash.indices(keys)

  返回一個新的陣列,由給定的鍵的值組成。找不到的鍵將插入預設值。該方法已被廢棄,請使用 select。

  21hash.inspect

  返回雜湊的列印字串版本。

  22hash.invert

  建立一個新的 hash,倒置 hash 中的 keys 和 values。也就是說,在新的雜湊中,hash 中的鍵將變成值,值將變成鍵。

  23hash.keys

  建立一個新的陣列,帶有 hash 中的鍵。/td>

  24hash.length

  以整數形式返回 hash 的大小或長度。

  25hash.merge(other_hash) [or]

  hash.merge(other_hash) { |key, oldval, newval| block }

  返回一個新的雜湊,包含 hash 和 other_hash 的內容,重寫 hash 中與 other_hash 帶有重複鍵的鍵值對。

  26hash.merge!(other_hash) [or]

  hash.merge!(other_hash) { |key, oldval, newval| block }

  與 merge 相同,但實際上 hash 發生了變化。

  27hash.rehash

  基於每個 key 的當前值重新建立 hash。如果插入後值發生了改變,該方法會重新索引 hash。

  28hash.reject { |key, value| block }

  為 block 為 true 的每個鍵值對建立一個新的 hash。

  29hash.reject! { |key, value| block }

  與 reject 相同,但實際上 hash 發生了變化。

  30hash.replace(other_hash)

  把 hash 的內容替換為 other_hash 的內容。

  31hash.select { |key, value| block }

  返回一個新的陣列,由 block 返回 true 的 hash 中的鍵值對組成。

  32hash.shift

  從 hash 中移除一個鍵值對,並把該鍵值對作為二元素陣列返回。

  33hash.size

  以整數形式返回 hash 的 size 或 length。

  34hash.sort

  把 hash 轉換為一個包含鍵值對陣列的二維陣列,然後進行排序。

  35hash.store(key, value)

  儲存 hash 中的一個鍵值對。

  36hash.to_a

  從 hash 中建立一個二維陣列。每個鍵值對轉換為一個數組,所有這些陣列都儲存在一個數組中。

  37hash.to_hash

  返回 hash(self)。

  38hash.to_s

  把 hash 轉換為一個數組,然後把該陣列轉換為一個字串。

  39hash.update(other_hash) [or]

  hash.update(other_hash) {|key, oldval, newval| block}

  返回一個新的雜湊,包含 hash 和 other_hash 的內容,重寫 hash 中與 other_hash 帶有重複鍵的鍵值對。

  40hash.value?(value)

  檢查 hash 是否包含給定的 value。

  41hash.values

  返回一個新的陣列,包含 hash 的所有值。

  42hash.values_at(obj, ...)

  返回一個新的陣列,包含 hash 中與給定的鍵相關的值。

  (編輯:雷林鵬 來源:網路)