位置:首頁 > 腳本語言 > Ruby教學 > Ruby哈希

Ruby哈希

哈希鍵 - 值對的集合,類似這樣:"employee" => "salary"。它類似於數組,除了索引是通過任意鍵的任何對象的類型,而不是一個整數索引。

順序遍曆一個哈希鍵或值要麼可能看起來是任意的,一般不會在插入順序。如果訪問的鍵的哈希值不存在,該方法將返回nil。

創建哈希:

使用數組中,有各種各樣的方法來創建哈希值。可以 new 類方法創建一個空的hash :

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[[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

以下是公共的哈希方法(假設哈希數組對象):

SN 方法及描述
1 hash == other_hash
Tests whether two hashes are equal, based on whether they have the same number of key-value pairs, and whether the key-value pairs match the corresponding pair in each hash.
2 hash.[key]
Using a key, references a value from hash. If the key is not found, returns a default value.
3 hash.[key]=value
Associates the value given by value with the key given by key.
4 hash.clear
Removes all key-value pairs from hash.
5 hash.default(key = nil)
Returns the default value for hash, nil if not set by default=. ([] returns a default value if the key does not exist in hash.)
6 hash.default = obj
Sets a default value for hash.
7 hash.default_proc
Returns a block if hash was created by a block.
8 hash.delete(key) [or]
array.delete(key) { |key| block }

Deletes a key-value pair from hash by key. If block is used, returns the result of a block if pair is not found. Compare delete_if.
9 hash.delete_if { |key,value| block }
Deletes a key-value pair from hash for every pair the block evaluates to true.
10 hash.each { |key,value| block }
Iterates over hash, calling the block once for each key, passing the key-value as a two-element array.
11 hash.each_key { |key| block }
Iterates over hash, calling the block once for each key, passing key as a parameter.
12 hash.each_key { |key_value_array| block }
Iterates over hash, calling the block once for each key, passing the key and value as parameters.
13 hash.each_key { |value| block }
Iterates over hash, calling the block once for each key, passing value as a parameter.
14 hash.empty?
Tests whether hash is empty (contains no key-value pairs), returning true or false.
15 hash.fetch(key [, default] ) [or]
hash.fetch(key) { | key | block }

Returns a value from hash for the given key. If the key can't be found, and there are no other arguments, it raises an IndexError exception; if default is given, it is returned; if the optional block is specified, its result is returned.
16 hash.has_key?(key) [or] hash.include?(key) [or]
hash.key?(key) [or] hash.member?(key)

Tests whether a given key is present in hash, returning true or false.
17 hash.has_value?(value)
Tests whether hash contains the given value.
18 hash.index(value)
Returns the key for the given value in hash, nil if no matching value is found.
19 hash.indexes(keys)
Returns a new array consisting of values for the given key(s). Will insert the default value for keys that are not found. This method is deprecated. Use select.
20 hash.indices(keys)
Returns a new array consisting of values for the given key(s). Will insert the default value for keys that are not found. This method is deprecated. Use select.
21 hash.inspect
Returns a pretty print string version of hash.
22 hash.invert
Creates a new hash, inverting keys and values from hash; that is, in the new hash, the keys from hash become values, and values become keys.
23 hash.keys
Creates a new array with keys from hash.
24 hash.length
Returns the size or length of hash as an integer.
25 hash.merge(other_hash) [or]
hash.merge(other_hash) { |key, oldval, newval| block }

Returns a new hash containing the contents of hash and other_hash, overwriting pairs in hash with duplicate keys with those from other_hash.
26 hash.merge!(other_hash) [or]
hash.merge!(other_hash) { |key, oldval, newval| block }

Same as merge, but changes are done in place.
27 hash.rehash
Rebuilds hash based on the current values for each key. If values have changed since they were inserted, this method reindexes hash.
28 hash.reject { |key, value| block }
Creates a new hash for every pair the block evaluates to true
29 hash.reject! { |key, value| block }
Same as reject, but changes are made in place.
30 hash.replace(other_hash)
Replaces the contents of hash with the contents of other_ hash.
31 hash.select { |key, value| block }
Returns a new array consisting of key-value pairs from hash for which the blockreturns true.
32 hash.shift
Removes a key-value pair from hash, returning it as a two-element array.
33 hash.size
Returns the size or length of hash as an integer.
34 hash.sort
Converts hash to a two-dimensional array containing arrays of key-value pairs, then sorts it as an array.
35 hash.store(key, value)
Stores a key-value pair in hash.
36 hash.to_a
Creates a two-dimensional array from hash. Each key/value pair is converted to an array, and all these arrays are stored in a containing array.
37 hash.to_hash
Returns hash (self).
38 hash.to_s
Converts hash to an array, then converts that array to a string.
39 hash.update(other_hash) [or]
hash.update(other_hash) {|key, oldval, newval| block}

Returns a new hash containing the contents of hash and other_hash, overwriting pairs in hash with duplicate keys with those from other_hash.
40 hash.value?(value)
Tests whether hash contains the given value.
41 hash.values
Returns a new array containing all the values of hash.
42 hash.values_at(obj, ...)
Returns a new array containing the values from hash that are associated with the given key or keys.