我想通过位置获取哈希值,就像数组一样。
例如:
h = Hash["a" => 100, "b" => 200]
在这个数组中,当我们调用h [0]时,它会返回给定数组中的第一个元素。
哈希表中是否也可以实现相同的功能?如果可以,那么如何实现?
谢谢, Prasad。
我想通过位置获取哈希值,就像数组一样。
例如:
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]]
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,但我认为您并不需要这个功能。