ruby使用数组tvalues来索引哈希的嵌套哈希

前端之家收集整理的这篇文章主要介绍了ruby使用数组tvalues来索引哈希的嵌套哈希前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > What is the most ruby-ish way of accessing nested hash values at arbitrary depths? 4个
> How to avoid NoMethodError for missing elements in nested hashes,without repeated nil checks?16个
在Ruby中,我想做这样的事情,

我有一个像这样构建的哈希哈希.

h = {1 => {2 => {3 => "three"}},'a' => { 'b' => { 'c' => "basd"}}}
=> {"a"=>{"b"=>{"c"=>"basd"}},1=>{2=>{3=>"three"}}}

如果我有一个像这样的值的数组.

a = [1,2,3]

我想有一个方法,它将使用数组值索引我的哈希中的嵌套键,并返回最后一个键指向的值(由前面的数组/键指导)
例如.

getHashValue([1,3]) should return "three" => h[1][2][3]

如果a = [‘a’,’b’,’c’]则返回值应为basd.

怎么做到这一点?

解决方法

然后是:
keys.inject(hash,:fetch)

或者早期的Ruby版本:

keys.inject(hash) {|h,k| h[k]}

如果你确实想要使用递归,那么更多的Rubyesque方法将是:

def get_value(obj,keys)
  keys.empty? ? obj : get_value(obj[keys[0]],keys[1..-1])
end

猜你在找的Ruby相关文章