ruby - 从不同嵌套的哈希中提取特定键

标签 ruby recursion hash nested extract

我正在尝试将提供的哈希中的不同“名称”值连接到一个字符串中。因此输出应该是一个包含所有“Name”值的数组或字符串。

对我来说,困难在于嵌套级别在两个到四个 parent 之间有所不同。

我尝试通过两种方式解决这个问题:

  1. 递归地遍历哈希并在每个级别将值附加到数组中。最后吐出数组。
  2. 展平散列,然后从该数组中挑选

不幸的是,相关问题中给出的答案似乎都不起作用。我确信这很简单,但我似乎无法弄清楚。非常感谢

my_hash = { "BreadCrumbs" => {
                    "Id" => 375,
                    "Name" => "Willingen",
                    "Parent" => {
                        "Id" => 52272,
                        "Name" => "Wintersport-Arena Sauerland",
                        "Parent" => {
                            "Id" => 8, 
                            "Name" => "Germany"
                        }
                    }
                }
            }

最佳答案

▶ hash = { "BreadCrumbs" => {
▷     "Id" => 375,        
▷     "Name" => "Willingen",        
▷     "Parent" => {        
▷       "Id" => 52272,            
▷       "Name" => "Wintersport-Arena Sauerland",            
▷       "Parent" => {            
▷         "Id" => 8,                 
▷         "Name" => "Germany"                
▷       }              
▷     }          
▷ }} 
▶ def concat hash
▷   [hash['Name'], hash['Parent'] ? concat(hash['Parent']) : nil]
▷ end  
▶ (concat hash['BreadCrumbs']).flatten.compact
#⇒ ["Willingen", "Wintersport-Arena Sauerland", "Germany"]

我不会在每次迭代时进行扁平化,以便结果仍然包含层次结构:

▶ concat hash['BreadCrumbs']
#⇒ ["Willingen", ["Wintersport-Arena Sauerland", ["Germany", nil]]]

请求的字符串作为结果:

▶ (concat hash['BreadCrumbs']).flatten.compact.join ', '
#⇒ "Willingen, Wintersport-Arena Sauerland, Germany"

关于ruby - 从不同嵌套的哈希中提取特定键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786335/

相关文章:

javascript - 使用测距选项生成零件号的最佳方法

通过分而治之检查所有元素是否相同

python - 使用 join() 的方法的空间复杂度

ruby - 检查两个散列是否具有相同的键集

ruby - 文件没有得到输出

ruby - 为什么我在一个明显存在的对象上得到 "undefined method for nil:NilClass"?

ruby - 如何在 Ruby 中的双引号字符串中使用\w

recursion - GS : Make recursive script

ruby - Capistrano 错误:<Rake::Task load:defaults => []>:Rake::Task 的未定义方法 `already_invoked'

pdf - iText - 生成没有证书链的 PDF 哈希