Tag: hash of hes

通过键名从ruby中的多维哈希中提取特定值

假设我有一个多维哈希,并且在其中一个子哈希中我有一个key => value对,我需要通过key检索它。 我该怎么做? 示例哈希: h={:x=>1,:y=>2,:z=>{:a=>{:k=>”needle”}}} h={:k=>”needle”} 关键是永远:k,我需要得到“针” 我注意到ruby1.8中的哈希没有“扁平”function,但如果它在那里,我想我只是做 h.flatten[:k] 我想我需要为此编写一个递归函数? 谢谢

在任意深度访问嵌套哈希值的最ruby方法是什么?

给出如下的哈希: AppConfig = { ‘service’ => { ‘key’ => ‘abcdefg’, ‘secret’ => ‘secret_abcdefg’ }, ‘other’ => { ‘service’ => { ‘key’ => ‘cred_abcdefg’, ‘secret’ => ‘cred_secret_abcdefg’ } } } 在某些情况下我需要一个函数来返回服务/密钥,在其他情况下我需要其他/ service / key。 一种简单的方法是传入散列和一组键,如下所示: def val_for(hash, array_of_key_names) h = hash array_of_key_names.each { |k| h = h[k] } h end 这样调用会导致’cred_secret_abcdefg’: val_for(AppConfig, %w[other service secret]) 似乎应该有比我在val_for()中写的更好的方法。

在ruby中访问嵌套哈希的元素

我正在使用ruby编写的一个小工具,它大量使用嵌套的哈希。 目前,我正在检查对嵌套哈希元素的访问,如下所示: structure = { :a => { :b => ‘foo’ }} # I want structure[:a][:b] value = nil if structure.has_key?(:a) && structure[:a].has_key?(:b) then value = structure[:a][:b] end 有一个更好的方法吗? 我想能够说: value = structure[:a][:b] 并且如果:a不是structure的关键等,则nil

如何避免NoMethodError在嵌套哈希中缺少元素,而不重复nil检查?

我正在寻找一种避免在深层嵌套哈希中检查每个级别的nil的好方法。 例如: name = params[:company][:owner][:name] if params[:company] && params[:company][:owner] && params[:company][:owner][:name] 这需要三次检查,并且会产生非常难看的代码。 有办法解决这个问题吗?