2014-01-09 193 views
0

我有以下几点:红宝石哈希键compare_by_identity

h1 = {} 
h1.compare_by_identity 
h1['a'] = '1' 
h1['a'] = '2' 
h1['a'] = '3' 
a_key = h1.keys.first 
p h1[a_key] 

而且它打印1,我怎么让它返回2或3?

+0

什么是'compare_by_identity'? – sawa

+1

@sawa [Hash#compare_by_identity](http://ruby-doc.org/core-2.1.0/Hash.html#method-i-compare_by_identity) – Stefan

+0

@Stefan感谢您的信息。我不知道。 – sawa

回答

1

如何让它返回2或3?

h1[h1.keys[0]] # => "1" 
h1[h1.keys[1]] # => "2" 
h1[h1.keys[2]] # => "3" 

可以值列表直接,当然访问,但我不认为这是你的问题的精神:

h1.values # => ["1", "2", "3"] 
+0

啊,正是我需要的,谢谢! – user3163916

0

这是因为'a'这是一个不同对象的每个时间。

'a'.object_id == 'a'.object_id 
=> false 
a = 'a' 
a.object_id == a.object_id 
=> true 

您可以尝试使用相同的对象/实例或符号。

h1 = {} 
h1.compare_by_identity 

h1['a'] = 1 
puts h1['a'] # => nil 

a = 'a' 
h1[a] = 2 
puts h1[a] # => 2 

h1[:a] = 3 
puts h1[:a] # => 3