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