将具有指示哈希深度的整数的数组转换为哈希
Convert array with integers which indicate hash depth to hash
我有以下数组:
[{text: "a", depth: 0},
{text: "b", depth: 1},
{text: "c", depth: 2},
{text: "d", depth: 1}]
我要解决的问题是采用扁平数组(上图)并根据每个元素的深度创建嵌套结构。我需要它嵌套的原因是递归地构建一个列表(有序或无序),我不能用我拥有的数组来做。
以下是以某种方式、形状或形式形成所需的输出。我尝试创建的嵌套结构的总体思路应该更清晰。
{
text: "a",
depth: 0,
sublevel: [
{
text: "a",
depth: 1,
sublevel: [
{
text: "b",
depth: 2,
sublevel: []
}
]
},
{
text: "d",
depth: 1,
sublevel: []
}
]
}
我想通了。
new_structure = []
depth = 0
array.each do |element|
if element[:depth] == 0
new_structure << element
else
if element[:depth] < depth || element[:depth] == depth
parent = recursive_method(new_structure[-1], element[:depth] - 1)[:sublevel]
parent = [] if parent.nil?
parent << element
else
recursive_method(new_structure[-1], element[:depth]).merge!({ sublevel: [element] })
end
end
depth = element[:depth]
end
def recursive_method(structure, depth)
return structure if structure[:sublevel].nil? || depth == 0
recursive_method(structure[:sublevel][-1], depth -= 1)
end
结果:
[
{
:text => "a",
:depth => 0,
:sublevel => [
{
:text => "b",
:depth => 1,
:sublevel => [
{
:text => "c",
:depth => 2
}
]
},
{
:text => "d",
:depth => 1
}
]
}
]
打开让它变得更好。
我有以下数组:
[{text: "a", depth: 0},
{text: "b", depth: 1},
{text: "c", depth: 2},
{text: "d", depth: 1}]
我要解决的问题是采用扁平数组(上图)并根据每个元素的深度创建嵌套结构。我需要它嵌套的原因是递归地构建一个列表(有序或无序),我不能用我拥有的数组来做。
以下是以某种方式、形状或形式形成所需的输出。我尝试创建的嵌套结构的总体思路应该更清晰。
{
text: "a",
depth: 0,
sublevel: [
{
text: "a",
depth: 1,
sublevel: [
{
text: "b",
depth: 2,
sublevel: []
}
]
},
{
text: "d",
depth: 1,
sublevel: []
}
]
}
我想通了。
new_structure = []
depth = 0
array.each do |element|
if element[:depth] == 0
new_structure << element
else
if element[:depth] < depth || element[:depth] == depth
parent = recursive_method(new_structure[-1], element[:depth] - 1)[:sublevel]
parent = [] if parent.nil?
parent << element
else
recursive_method(new_structure[-1], element[:depth]).merge!({ sublevel: [element] })
end
end
depth = element[:depth]
end
def recursive_method(structure, depth)
return structure if structure[:sublevel].nil? || depth == 0
recursive_method(structure[:sublevel][-1], depth -= 1)
end
结果:
[
{
:text => "a",
:depth => 0,
:sublevel => [
{
:text => "b",
:depth => 1,
:sublevel => [
{
:text => "c",
:depth => 2
}
]
},
{
:text => "d",
:depth => 1
}
]
}
]
打开让它变得更好。