我的目标是创建一个用散列初始化的对象,然后查询该对象以从该散列中获取值。 为了让事情更清楚,这里有一个粗略的例子来说明我的意思:
class HashHolder
def initialize(hash)
@hash = hash
end
def get_value(*args)
# What are my possibilities here?
end
end
holder = HashHolder.new({:a => { :b => { :c => "value" } } } )
holder.get_value(:a, :b, :c) # should return "value"
我知道我可以对参数列表执行迭代,如下所示:
def get_value(*args)
value = @hash
args.each do |k|
value = value[k]
end
return value
end
但如果我打算大量使用这种方法,当我只想访问哈希值时,这会显着降低我的性能。
有什么建议吗?
最佳答案
更新答案已经有一段时间了。
(在 ruby 2.3.1 中测试)
你有这样的哈希:
my_hash = {:a => { :b => { :c => "value" } } }
提出的问题:
my_hash.get_value(:a, :b, :c) # should return "value"
答案:使用 'dig' 而不是 get_value,如下所示:
my_hash.dig(:a,:b,:c) # returns "value"
由于问题的标题具有误导性(应该是这样的:如何使用键数组获取嵌套哈希中的值),这里是对实际问题的回答:
Getting ruby hash values by an array of keys
准备:
my_hash = {:a => 1, :b => 3, :d => 6}
my_array = [:a,:d]
答案:
my_hash.values_at(*my_array) #returns [1,6]
关于ruby-on-rails - 通过键数组获取 ruby 哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579827/