如何在ruby中按位置获取哈希值?

时间:2012-08-28 08:23:40

标签: ruby-on-rails ruby hash

我希望像数组一样按位置获取哈希值。

实施例:  h = Hash["a" => 100, "b" => 200]

在这个数组中,当我们调用h [0]时,它返回给定数组中的第一个元素。

哈希可能有同样的事情吗?如果是,那怎么样?

先谢谢, 普拉萨德。

6 个答案:

答案 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,但我不认为你正在寻找这个功能。