【问题标题】:Select all values by key from a nested hash从嵌套哈希中按键选择所有值
【发布时间】:2016-07-06 11:40:55
【问题描述】:

我想获取没有嵌套到数组中的每个键的值。

lists = {'value'=>1, 'next'=>{'value'=>2, 'next'=>{'value'=>3, 'next'=>nil}}}

def list_to_array(h)
  result = []
  h.each_value {|value|
  value.is_a?(Hash) ? list_to_array(value) :
   result << value
 }
  result
end

p list_to_array(lists)

你能告诉我我做错了什么吗?

想要输出 [1,2,3] 但我得到 [1]

【问题讨论】:

    标签: arrays ruby loops hash


    【解决方案1】:

    在您的解决方案中,内部 list_to_array 方法调用不会更新当前结果数组,因此它没有被正确更新。 我重构了更多内容,使其更具可读性并排除 nil 值

    lists = {'value'=>1, 'next'=>{'value'=>2, 'next'=>{'value'=>3, 'next'=>nil}}}
    
    def list_to_array(h, results = [])
      h.each_value do |value|
        if value.is_a?(Hash)
          list_to_array(value, results)
        else
          results << value unless value.nil?
        end
      end
    
      results
    end
    
    p list_to_array(lists)
    
    => [1, 2, 3]
    

    【讨论】:

    • 出于一些愚蠢的原因,我认为将结果变量添加到函数参数是错误的。现在可以了。谢谢你的回答,祝你有美好的一天;)
    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多