Til*_*ilo 59
当然你可以使用整数作为键...
h = {1 => 'one', 2 => 'two', 3 => 'three'}
(1..3).each do |i|
puts h[i]
end
Run Code Online (Sandbox Code Playgroud)
=>
one
two
there
Run Code Online (Sandbox Code Playgroud)
irb是你的朋友!试试吧..
实际上,您可以使用任何Ruby对象作为键(或值).我们通常不会考虑像这样使用Hashes,但它可能非常有用.
dyl*_*nkb 47
其他人在这里查看答案可能会发现,当您在Ruby哈希中使用整数作为符号键时会发生异常,这很有趣 {symbol: value}
hash = {1: 'one'} # will not work
hash = {1 => 'one'} # will work
Run Code Online (Sandbox Code Playgroud)
请求说明:
对于第一个示例失败的原因,最简单的答案可能to_sym
是不是为Fixnum整数实现的方法.
为了更深入地解释为什么会这样,使用符号的主要好处之一是两个符号实际上是"同一个对象".或者至少他们共享相同的对象ID.
:foo.object_id == :foo.object_id
=> true
Run Code Online (Sandbox Code Playgroud)
相同的字符串不共享相同的对象,因此不共享相同的对象ID.
"foo".object_id == "foo".object_id
=> false
Run Code Online (Sandbox Code Playgroud)
与符号一样,相同的Fixnum整数将具有相同的对象ID.因此,您不需要将它们转换为符号.
one = 1
=> 1
uno = 1
=> 1
one.object_id
=> 3
one.object_id == uno.object_id
=> true
Run Code Online (Sandbox Code Playgroud)
将对象用作散列键的唯一要求是它必须使用散列值响应消息散列,并且给定键的散列值不得更改.例如,如果你这样称呼:
1.hash()
Run Code Online (Sandbox Code Playgroud)
您可以看到数字1确实响应了哈希消息