带有哈希的嵌套数组的递归

时间:2014-07-14 16:27:33

标签: ruby

我没有让它正常工作。

我有一个哈希数组,其中包含不同深度的嵌套哈希数组。如果任何嵌套结果为false,则必须返回false,否则为true。

array = [
  {
    result: true,
    dependents: [
      {
        result: true,
        dependents: [
          {result: true},
          {result: false}
        ]
      }
    ]
  },
  result: true,
  dependents: []
]

def result(array)
   if array.find {|line| line[:result] == false}
    return false
   else
    array.each do |line| 
      result(line[:dependents])
    end
  end
  true    
end

result(array)
#=> true (should be false)

方法result()目前无法正常工作,因为它对给定数组返回true并且应该为false。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  result(line[:dependents])

可能必须

  return false if not result(line[:dependents])  ## Or unless ...

或者只是简单地

  result(line[:dependents]) or return false

答案 1 :(得分:1)

您以递归方式调用result方法,但当该调用的结果返回false时,您不会中断。

def result(array)
  array.each do |h|
    return false if h[:result] == false
    return false if h[:dependents] && result(h[:dependents]) == false
  end

  true
end