在Ruby中映射嵌套数组,但它';s返回所有项目为零

在Ruby中映射嵌套数组,但它';s返回所有项目为零,ruby,Ruby,我有一个简单的代码递归映射一个带有散列和嵌套数组的数组。我想让每个项更改为方法返回值的新值,就像映射总是做的那样。 但我得到一个零数组返回,我不知道为什么 [nil,nil,nil,nil,[nil]] 我认为这是最后一个命令:(if menu.child),获取nil并在映射时返回到每个项。如果我猜错了,请纠正我。您忘记将返回值添加到map方法。在使用递归函数的情况下,或者即使未触发语句,它也始终为零。因此,您应该使用以下方法修复您的方法: def menu_struct_arr( m_arr

我有一个简单的代码递归映射一个带有散列和嵌套数组的数组。我想让每个项更改为方法返回值的新值,就像映射总是做的那样。 但我得到一个零数组返回,我不知道为什么

[nil,nil,nil,nil,[nil]]


我认为这是最后一个命令:(if menu.child),获取nil并在映射时返回到每个项。如果我猜错了,请纠正我。

您忘记将返回值添加到
map
方法。在使用递归函数的情况下,或者即使未触发语句,它也始终为零。因此,您应该使用以下方法修复您的方法:

def menu_struct_arr( m_arr )
  m_arr.map do |menu|
    menu = menulize(menu)
    if menu.child
      menu_struct_arr(menu.child)
    end
    menu
  end
end
我建议你在写这篇文章时要有点含蓄

class DataTest
  Menu = Struct.new(:path, :childs)

  ARR = 
    [
      {path: 'index'},
      {path: 'about'},
      {path: 'galleries'},
      {path: 'views'},
      {path: 'contact', childs: [{path: 'contact/find_us'}]}
    ]

  def array_menulize(items)
    items.map do |item|
      single_menulize(item)
    end
  end

  def single_menulize(item)
    menulized = Menu.new(item[:path], item[:childs])
    array_menulize(menulized.childs) if menulized.childs
    menulized
  end
end

谢谢,这是一个Struct数组返回,但是如何在child中迭代散列呢?或者我不应该使用这种数据结构,或者我应该尝试其他方法来循环菜单树?事实上,我无法理解您为什么尝试使用这种方法以及为什么。但我为你们澄清了一些错误。因此,如果您只想在ruby中迭代
散列
,它与
数组
一样简单。使用类似的方法。
class DataTest
  Menu = Struct.new(:path, :childs)

  ARR = 
    [
      {path: 'index'},
      {path: 'about'},
      {path: 'galleries'},
      {path: 'views'},
      {path: 'contact', childs: [{path: 'contact/find_us'}]}
    ]

  def array_menulize(items)
    items.map do |item|
      single_menulize(item)
    end
  end

  def single_menulize(item)
    menulized = Menu.new(item[:path], item[:childs])
    array_menulize(menulized.childs) if menulized.childs
    menulized
  end
end