从 tree-like 结构构建散列
Build hash from tree-like structure
我有一个名为 Project
的模型,它可以有任意数量的 children,而 children(child) 可以有任意数量的 child仁。基本上我使用 gem
https://github.com/collectiveidea/awesome_nested_set实现这个(tree-kind结构)
我想按照父母的顺序构建像 hash[child.id] = child.name
这样的哈希。
对于前。我有 3 个项目(1、2、3),项目#2 是项目#1 的 child,项目#3 和项目#1 是根。
结果我想要散列,看起来像 {1=> name1, 2=> name2, 3=> name3}
我知道这需要递归完成,但我坚持使用以下代码
def self.build_tree_of_projects(project)
hash = {}
project.children.each do |child|
hash[child.id] = "#{' ' * child.level + '»' + ' '}#{child.try(:name)}"
next unless child.children.present?
hash.merge(self.build_tree_of_projects(child)) if child.children.present?
end
hash
end
它只是 return 我用 1 对哈希,什么时候应该是 ~5。我做错了什么?
看起来像hash.merge
does not change the hash in-place。将对 hash.merge
的调用替换为对 hash.merge!
的调用,它应该可以工作。
我有一个名为 Project
的模型,它可以有任意数量的 children,而 children(child) 可以有任意数量的 child仁。基本上我使用 gem
https://github.com/collectiveidea/awesome_nested_set实现这个(tree-kind结构)
我想按照父母的顺序构建像 hash[child.id] = child.name
这样的哈希。
对于前。我有 3 个项目(1、2、3),项目#2 是项目#1 的 child,项目#3 和项目#1 是根。
结果我想要散列,看起来像 {1=> name1, 2=> name2, 3=> name3}
我知道这需要递归完成,但我坚持使用以下代码
def self.build_tree_of_projects(project)
hash = {}
project.children.each do |child|
hash[child.id] = "#{' ' * child.level + '»' + ' '}#{child.try(:name)}"
next unless child.children.present?
hash.merge(self.build_tree_of_projects(child)) if child.children.present?
end
hash
end
它只是 return 我用 1 对哈希,什么时候应该是 ~5。我做错了什么?
看起来像hash.merge
does not change the hash in-place。将对 hash.merge
的调用替换为对 hash.merge!
的调用,它应该可以工作。