Ruby Hash
A Hash
is a collection of key-value pairs similar to "key" => "value". Hashes are similar to arrays, but their indices are not limited to integers.
The indices (or "keys") of a Hash can be almost any object.
Although Hashes are similar to arrays, there is a significant difference: the elements of a Hash have no specific order. If order is important, you should use an array.
Creating a Hash
Like arrays, there are various ways to create Hashes. You can create an empty Hash using the new
class method:
months = Hash.new
You can also create a Hash with a default value using new
, where a Hash without a default value returns nil
:
months = Hash.new("month")
or
months = Hash.new "month"
When you access any key in a Hash with a default value, if the key or value does not exist, accessing the Hash will return the default value:
Example
#!/usr/bin/ruby
months = Hash.new("month")
puts "#{months[0]}"
puts "#{months[72]}"
The output of the above example is:
month
month
Example
#!/usr/bin/ruby
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"
The output of the above example is:
100
200
You can use any Ruby object as a key or value, even an array, as shown in the following example:
[1,"jan"] => "January"
Hash Built-in Methods
To call Hash methods, you need to instantiate a Hash object. Here are the ways to create Hash object instances:
Hash[[key =>|, value]* ] or
Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }
This will return a new Hash filled with the given objects. Now, using the created object, we can call any available methods. For example:
Example
#!/usr/bin/ruby
$, = ", "
months = Hash.new("month")
months = {"1" => "January", "2" => "February"}
keys = months.keys
puts "#{keys}"
The output of the above example is:
["1", "2"]
Below are the public Hash methods (assuming hash
is a Hash object):
No. | Method & Description | ||
---|---|---|---|
1 | hash == other_hash <br>Checks if two hashes have the same number of key-value pairs and if the key-value pairs match each other to determine equality. |
||
2 | hash[key] <br>References the value from the hash using the key. Returns the default value if the key is not found. |
||
3 | hash[key]=value <br>Associates the given value with the given key. |
||
4 | hash.clear <br>Removes all key-value pairs from the hash. |
||
5 | hash.default(key = nil) <br>Returns the default value of the hash, or nil if not set via default= . (If the key does not exist in the hash, [] returns a default value.) |
||
6 | hash.default = obj <br>Sets the default value for the hash. |
||
7 | hash.default_proc <br>Returns the block if the hash was created by a block. |
||
8 | hash.delete(key) [or]<br>`array.delete(key) { |
key | block }<br>Deletes the key-value pair from the hash by key. Returns the result of the block if the key is not found and a block is given. Compare with delete_if`. |
9 | `hash.delete_if { | key,value | block }`<br>Deletes every key-value pair from the hash for which the block evaluates to true. |
10 | `hash.each { | key,value | block }`<br>Iterates over the hash, calling the block once for each key, passing the key-value pair as a two-element array. |
11 | `hash.each_key { | key | block }`<br>Iterates over the hash, calling the block once for each key, passing the key as a parameter. |
12 | `hash.each_key { | key_value_array | block }`<br>Iterates over the hash, calling the block once for each key, passing the key and value as parameters. |
13 | `hash.each_value { | value | block }`<br>Iterates over the hash, calling the block once for each key, passing the value as a parameter. |
14 | hash.empty? <br>Checks if the hash is empty (contains no key-value pairs), returning true or false . |
||
15 | hash.fetch(key [, default] ) [or]<br>`hash.fetch(key) { |
key | block }<br>Returns the value from the hash for the given key. If the key is not found and no other arguments are provided, it raises an IndexError; if defaultis given, it returns default`; if an optional block is specified, it returns the result of the block. |
16 | hash.has_key?(key) [or] hash.include?(key) [or]<br>hash.key?(key) [or] hash.member?(key) <br>Checks if the given key exists in the hash, returning true or false . |
||
17 | hash.has_value?(value) <br>Checks if the hash contains the given value. |
||
18 | hash.index(value) <br>Returns the key for the given value in the hash, or nil if no matching value is found. |
||
19 | hash.indexes(keys) <br>Returns a new array consisting of values for the given keys. Missing keys will insert the default value. This method is deprecated, use select instead. |
||
20 | hash.indices(keys) <br>Returns a new array consisting of values for the given keys. Missing keys will insert the default value. This method is deprecated, use select instead. |
||
21 | hash.inspect <br>Returns a printable string version of the hash. |
||
22 | hash.invert <br>Creates a new hash, inverting the keys and values of the hash. That is, keys in the hash become values in the new hash, and values become keys. |
||
23 | hash.keys <br>Creates a new array containing the keys from the hash. |
||
24 | hash.length <br>Returns the size or length of the hash as an integer. |
||
25 | hash.merge(other_hash) [or]<br>`hash.merge(other_hash) { |
key, oldval, newval | block }<br>Returns a new hash containing the contents of hashand other_hash, overwriting key-value pairs in hashwith duplicate keys from other_hash`. |
26 | hash.merge!(other_hash) [or]<br>`hash.merge!(other_hash) { |
key, oldval, newval | block }<br>Same as merge, but actually changes hash`. |
27 | hash.rehash <br>Rebuilds the hash based on the current values for each key. If values have changed since they were inserted, this method re-indexes the hash. |
||
28 | `hash.reject { | key, value | block }<br>Similar to delete_if, but works on a copy of the hash. Equivalent to hsh.dup.delete_if`. |
29 | `hash.reject! { | key, value | block }<br>Equivalent to delete_if, but returns nil` if no changes were made. |
30 | hash.replace(other_hash) <br>Replaces the contents of the hash with the contents of other_hash . |
||
31 | `hash.select { | key, value | block }<br>Returns a new array consisting of key-value pairs from the hash for which the block returns true`. |
32 | hash.shift <br>Removes a key-value pair from the hash and returns it as a two-element array. |
||
33 | hash.size <br>Returns the size or length of the hash as an integer. |
||
34 | hash.sort <br>Converts the hash to a two-dimensional array of [key, value] arrays and sorts it. |
||
35 | hash.store(key, value) <br>Stores a key-value pair in the hash. |
||
36 | hash.to_a <br>Creates a two-dimensional array from the hash. Each key-value pair is converted to an array, and all these arrays are stored in an array. |
||
37 | hash.to_hash <br>Returns the hash (self). |
||
38 | hash.to_s <br>Converts the hash to an array, then converts that array to a string. |
||
39 | hash.update(other_hash) [or]<br>`hash.update(other_hash) { |
key, oldval, newval | block}<br>Returns a new hash containing the contents of hashand other_hash, overwriting key-value pairs in hashwith duplicate keys from other_hash`. |
40 | hash.value?(value) <br>Checks if the hash contains the given value. |
||
41 | hash.values <br>Returns a new array containing all the values of the hash. |
||
42 | hash.values_at(obj, ...) <br>Returns a new array containing the values associated with the given keys in the hash. |