我有以下数组
["key", "key_deeper", "key_even_deeper"]
和哈希:
{ "key" => { "key_deeper" => { "key_even_deeper" => "BINGO!" } } }
将数组应用到哈希上以接收 “BINGO!”
的最短或最具表现力的方法是什么?
这是基本情况,但也有一种特殊情况,即键的值不仅是 String => Hash
,而且是 String => [Integer, Hash ]
。
例如
["key1", "key2"]
关于哈希
{"key1" => [5, {"key2" => "BINGO!" }] }
应该再次返回 "BINGO!"
,但是仅包含 ["key1"]
的数组只会返回 5
。
最佳答案
可能最简单的方法是使用inject
:
array.inject(hash) do |h, i|
h.fetch(i){ {} }
end
# => "BINGO!"
fetch
用于防止 NoMethodError
,以防您的查找值之一不在散列中。但是,在这种情况下,它将返回一个空哈希。您可能想改为执行标准查找,即
array.inject(hash) {|h,i| h[i] }
编辑:
这是一个更短的方法(我不知道我是否会说它“更具表现力”,但它更短):
array.inject(hash, :[])
关于ruby - 将包含键迭代的数组应用于哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15725115/