我希望像数组一样按位置获取哈希值。
实施例:
h = Hash["a" => 100, "b" => 200]
在这个数组中,当我们调用h [0]时,它返回给定数组中的第一个元素。
哈希可能有同样的事情吗?如果是,那怎么样?
先谢谢, 普拉萨德。
答案 0 :(得分:10)
如上所述,根据您的使用案例,您可以执行以下操作:
h.keys[0]
h.values[0]
h.to_a[0]
由于Ruby 1.9.1 Hash
保留了插入顺序。如果你需要Ruby 1.8兼容性ActiveSupport::OrderedHash
是个不错的选择。
答案 1 :(得分:5)
这个位置在哈希中没有很好地定义,因为根据定义它是一个无序集。如果你坚持能够做这样的事情,你仍然可以将哈希转换为数组,然后继续你知道的方式:
irb(main):001:0> h = {:a => 1, :b => 2}
=> {:b=>2, :a=>1}
irb(main):002:0> h.to_a
=> [[:b, 2], [:a, 1]]
答案 2 :(得分:2)
你可以扩展Hash以获得你需要的东西(ruby 1.9.x):
class Hash
def last # first is already defined
idx = self.keys.last
[idx , self[idx]]
end
def array_index_of(n) # returns nth data
idx = self.keys[n]
self[idx]
end
end
h = {"a" => 100, "b" => 200}
h.first # ["a", 100]
h.last # ["b", 200]
h.array_index_of(0) # => 100
h.array_index_of(1) # => 200
答案 3 :(得分:1)
就像这样:
h.values[0]
# or
h.keys[0]
但是元素的顺序是未定义的,也许它们不是你想要的顺序。
答案 4 :(得分:0)
您只能通过按键获取元素。哈希是一种没有订单的结构,就像在集合中一样。
答案 5 :(得分:0)
哈希值只能通过键访问,如其他答案中所述。哈希不支持数组的索引属性。如果你想在ruby中使用有序哈希,你可以使用ActiveSupport :: OrderedHash,但我不认为你正在寻找这个功能。