Guest User

Untitled

a guest
Dec 17th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. root = {:id => 0, :title => '', :parent_id => nil}
  4.  
  5. arr = arr = [
  6. {:id=>1, :title=>"A", :parent_id=>nil},
  7. {:id=>2, :title=>"B", :parent_id=>nil},
  8. {:id=>3, :title=>"A1", :parent_id=>1},
  9. {:id=>4, :title=>"A2", :parent_id=>1},
  10. {:id=>5, :title=>"A11", :parent_id=>3},
  11. {:id=>6, :title=>"A12", :parent_id=>3},
  12. {:id=>7, :title=>"A2", :parent_id=>6},
  13. {:id=>8, :title=>"A21", :parent_id=>4},
  14. {:id=>9, :title=>"B11", :parent_id=>2},
  15. {:id=>10, :title=>"B12", :parent_id=>2},
  16. ]
  17.  
  18. map = {}
  19.  
  20. arr.each do |e|
  21. map[e[:id]] = e
  22. end
  23.  
  24. @@tree = {}
  25.  
  26. arr.each do |e|
  27. pid = e[:parent_id]
  28. if pid == nil || !map.has_key?(pid)
  29. (@@tree[root] ||= []) << e
  30. else
  31. (@@tree[map[pid]] ||= []) << e
  32. end
  33. end
  34.  
  35. def print_tree(item, level)
  36. items = @@tree[item]
  37. unless items == nil
  38. indent = level > 0 ? sprintf("%#{level * 2}s", " ") : ""
  39. items.each do |e|
  40. puts "#{indent}-#{e[:title]}"
  41. print_tree(e, level + 1)
  42. end
  43. end
  44. end
  45.  
  46. print_tree(root, 0)
Add Comment
Please, Sign In to add comment