Hi all,
I have a hash that contains other hashes, now I’m trying to retreive the
information on those but I can’t get the values inside.
Just this code for explain what happens to me:
Im using ruby-1.9.2-p136.
## just a sample
notifications = Hash.new
notifications[‘1’] = { what: ‘text’, who: ‘Antonio’, when: Time.now}
notifications[‘2’] = { what: ‘text’, who: ‘Alfonso’, when: Time.now}
notifications[‘3’] = { what: ‘text’, who: ‘Alberto’, when: Time.now}
notifications.each do |key, value|
puts key.inspect # Getting: ‘1’, ‘2’,‘3’ correct
puts value.inspect # Getting: { what: ‘text’, who:
‘Antonio’, when: Time.now} and so on. Correct
puts value.class # Getting: Hash. Correct
puts value.has_key?(‘what’) # Getting false. Incorrect
puts value.has_key?(‘when’) # Getting false. Incorrect
puts value.has_key?(‘data’) # Getting false. Incorrect
I get the values…
value.each do | k, v |
puts “#{k}: #{v}”
end
end
Thanks in advance.
capi
2
Take another look at value.inspect. Those hash keys are symbols, not
strings. value.has_key? :what et al should work.
On Mon, Oct 3, 2011 at 12:42 AM, Antonio Fernández vara
capi
3
{ what: ‘text’, who: ‘Antonio’, when: Time.now}
is in fact
{ :what => ‘text’, :who => ‘Antonio’, :when => Time.now }
the keys are symbols, not strings
so you must
puts value.has_key?(:what)
capi
4
On Oct 3, 3:42am, Antonio Fernández vara
[email protected] wrote:
just a sample
notifications = Hash.new
notifications[‘1’] = { what: ‘text’, who: ‘Antonio’, when: Time.now}
notifications[‘2’] = { what: ‘text’, who: ‘Alfonso’, when: Time.now}
notifications[‘3’] = { what: ‘text’, who: ‘Alberto’, when: Time.now}
If this is an accurate portrayal of your hash-of-hashes in the real
code, I suggest you consider an array-of-hashes instead.
capi
5
On Tue, Oct 4, 2011 at 2:21 AM, Yossef M. [email protected]
wrote:
code, I suggest you consider an array-of-hashes instead.
Or even an array of Structs, e.g.
Item = Struct.new :what, :who, :when
notifications = [
Item[‘text’, ‘Antonio’, Time.now],
Item[‘text’, ‘Antonio’, Time.now],
Item[‘text’, ‘Antonio’, Time.now],
]
Kind regards
robert
capi
6
Thanks both, now I understand I’m doing correctly the hashes.