ruby-on-rails 从所有第一个元素转换数组的数组[已关闭]

6ojccjat  于 2023-06-07  发布在  Ruby
关注(0)|答案(1)|浏览(186)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

8年前关闭。
Improve this question
我正在尝试转换成以下数组的数组

[
  "master_type", # [0]
  [
    "type_1",    # [1][0]
    [
      "type_2",  # [1][1][0]
      [
        "type_3" # [1][1][1][0]
      ]
    ],
    [
      "type_3"   # [1][2][0]
    ]
  ],
  [
    "type_4",    # [2][0]
    [
      "type_2"   # [2][1][0]
    ]
  ],
  [
    "type_2",    # [3][0]
    "type_3"     # [3][1]
  ],
  "type_3"       # [3][1]
]

变成了

[
  ["master_type", "type_1", "type_2", "type_3"],
  ["master_type", "type_1", "type_3"],
  ["master_type", "type_4", "type_2"],
  ["master_type", "type_2", "type_3"],
  ["master_type", "type_3"]
]

最后,我想读取这个树,并收集所有的第一个元素时,有第一个元素,然后删除它们,然后再这样做,直到我的第一个数组是空的。
我该怎么解决?
值得注意的是,这个例子是字符串,但我会用更复杂的对象来做。

nukf8bse

nukf8bse1#

这个实现是递归的,但我怀疑它是否会溢出。如果你的树很深,你可能想让它迭代。

def flatten_tree(tree)
  parent, *subtree = tree

  return [[parent]] if subtree.empty?

  subtree.flat_map do |element|
    flatten_tree(element).each { |children| children.unshift(parent) }
  end
end
  • 根据泽的评论更新了答案。*

相关问题