hashmap - Ruby value of a hash key?

ID : 131393

viewed : 6

Tags : rubyhashmapruby

Top 5 Answer for hashmap - Ruby value of a hash key?

vote vote

91

Hashes are indexed using the square brackets ([]). Just as arrays. But instead of indexing with the numerical index, hashes are indexed using either the string literal you used for the key, or the symbol. So if your hash is similar to

hash = { "key1" => "value1", "key2" => "value2" } 

you can access the value with

hash["key1"] 

or for

hash = { :key1 => "value1", :key2 => "value2"} 

or the new format supported in Ruby 1.9

hash = { key1: "value1", key2: "value2" } 

you can access the value with

hash[:key1] 
vote vote

82

This question seems to be ambiguous.

I'll try with my interpretation of the request.

def do_something(data)    puts "Found! #{data}" end  a = { 'x' => 'test', 'y' => 'foo', 'z' => 'bar' } a.each { |key,value| do_something(value) if key == 'x' } 

This will loop over all the key,value pairs and do something only if the key is 'x'.

vote vote

74

As an addition to e.g. @Intrepidd s answer, in certain situations you want to use fetch instead of []. For fetch not to throw an exception when the key is not found, pass it a default value.

puts "ok" if hash.fetch('key', nil) == 'X' 

Reference: https://docs.ruby-lang.org/en/2.3.0/Hash.html .

vote vote

67

How about this?

puts "ok" if hash_variable["key"] == "X" 

You can access hash values with the [] operator

vote vote

53

It seems that your question is maybe a bit ambiguous.

If “values” in the first sentence means any generic value (i.e. object, since everything in Ruby can be viewed as an object), then one of the other answers probably tells you what you need to know (i.e. use Hash#[] (e.g. hash[some_key]) to find the value associated with a key).

If, however, “values” in first sentence is taken to mean the value part of the “key, value pairs” (as are stored in hashes), then your question seems like it might be about working in the other direction (key for a given value).

You can find a key that leads to a certain value with Hash#key.

ruby-1.9.2-head :001 > hash = { :a => '1', :b => :two, :c => 3, 'bee' => :two }  => {:a=>"1", :b=>:two, :c=>3, "bee"=>:two}  ruby-1.9.2-head :002 > a_value = :two  => :two  ruby-1.9.2-head :003 > hash.key(a_value)  => :b  

If you are using a Ruby earlier than 1.9, you can use Hash#index.

When there are multiple keys with the desired value, the method will only return one of them. If you want all the keys with a given value, you may have to iterate a bit:

ruby-1.9.2-head :004 > hash[:b] == hash['bee']  => true  ruby-1.9.2-head :005 > keys = hash.inject([]) do # all keys with value a_value ruby-1.9.2-head :006 >       |l,kv| kv[1] == a_value ? l << kv[0] : l ruby-1.9.2-head :007?>   end  => [:b, "bee"]  

Once you have a key (the keys) that lead to the value, you can compare them and act on them with if/unless/case expressions, custom methods that take blocks, et cetera. Just how you compare them depends on the kind of objects you are using for keys (people often use strings and symbols, but Ruby hashes can use any kind of object as keys (as long as they are not modified while they serve as keys)).

Top 3 video Explaining hashmap - Ruby value of a hash key?

Related QUESTION?