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

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

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

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

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

先谢谢Prasad。

如上所述,根据您的使用情况,您可以执行以下操作:

  h.keys[0] h.values[0] h.to_a[0] 

由于Ruby 1.9.1 Hash保留了插入顺序。 如果你需要Ruby 1.8兼容性ActiveSupport::OrderedHash是一个不错的选择。

好吧,这个位置在哈希中没有很好地定义,因为根据定义它是一个无序集。 如果你坚持能够做这样的事情,你仍然可以将哈希转换为数组然后继续你知道的方式:

 irb(main):001:0> h = {:a => 1, :b => 2} => {:b=>2, :a=>1} irb(main):002:0> h.to_a => [[:b, 2], [:a, 1]] 

您可以扩展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 

就像这样:

 h.values[0] # or h.keys[0] 

但是元素的顺序是未定义的,也许它们不是你想要它们的顺序。

您只能通过键获取元素。 哈希是一种没有秩序的结构,就像在集合中一样。

哈希值只能通过键访问,如其他答案中所述。 哈希不支持数组的索引属性。 如果你想在ruby中使用有序哈希,你可以使用ActiveSupport :: OrderedHash,但我不认为你正在寻找这个function。