ruby如何生成树形结构表单数组?
发布时间:2020-12-17 04:29:19 所属栏目:百科 来源:网络整理
导读:我有一个数组,其中包含这样的项目列表 arr = [ {:id=1,:title="A",:parent_id=nil},{:id=2,:title="B",{:id=3,:title="A1",:parent_id=1},{:id=4,:title="A2",{:id=5,:title="A11",:parent_id=3},{:id=6,:title="12",{:id=7,:title="A2=121",:parent_id=6},{
我有一个数组,其中包含这样的项目列表
arr = [ {:id=>1,:title=>"A",:parent_id=>nil},{:id=>2,:title=>"B",{:id=>3,:title=>"A1",:parent_id=>1},{:id=>4,:title=>"A2",{:id=>5,:title=>"A11",:parent_id=>3},{:id=>6,:title=>"12",{:id=>7,:title=>"A2=121",:parent_id=>6},{:id=>8,:title=>"A21",:parent_id=>4},{:id=>9,:title=>"B11",:parent_id=>2},{:id=>10,:title=>"B12",... ] 如果parent_id为nil,那么它应该是父节点,如果parent_id不是nil,则它应该在特定父节点下. 基于id和parent_id,我想提供这样的响应: -A -A1 -A11 -A12 -A123 -A2 -A21 -B -B1 -B11 -B12 我怎么能产生上面提到的回应? 谢谢 解决方法
一个例子:
#!/usr/bin/env ruby root = {:id => 0,:title => '',:parent_id => nil} arr = arr = [ {:id=>1,] map = {} arr.each do |e| map[e[:id]] = e end @@tree = {} arr.each do |e| pid = e[:parent_id] if pid == nil || !map.has_key?(pid) (@@tree[root] ||= []) << e else (@@tree[map[pid]] ||= []) << e end end def print_tree(item,level) items = @@tree[item] unless items == nil indent = level > 0 ? sprintf("%#{level * 2}s"," ") : "" items.each do |e| puts "#{indent}-#{e[:title]}" print_tree(e,level + 1) end end end print_tree(root,0) 输出: -A -A1 -A11 -12 -A2=121 -A2 -A21 -B -B11 -B12 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |