条件: 有一个普通的数组 [s1, s2, s3, s4... sn] si 的意思是表示一个部门,部门与部门之间,存在上下级的关系。 输出:
[ [s1, [s2, s3] ], [s4, [ [s5, [s6, s7], s8], s9 ] ] ]
[s1, [s2, s3] ] 表示的意思是 s2 ,s3 都是 s1 的子部门
[s1, [s2, s3] ]
这个用 hash 更好吧
这个表示方式太罗嗦,而且你写出来的也是错的 按照 [部门,[子部门 1, 子部门 2, ...]] 这个表达方式,[s5, [s6, s7], s8]是什么意思? 如果是 s6, s8 是 s5 的子元素 s7 是 s6 的子元素 那应该写成 [s5, [[s6, [s7]], s8]]
[s5, [s6, s7], s8]
[s5, [[s6, [s7]], s8]]
不过解析起来很麻烦的,还不如写成 { s5: [s6, s8], s6: [s7], }
@reus, @tumayun Hash,Array 都行,关键是怎么得到这个值
#3 楼 @chucai hash 的 key 是部门,value 是子部门 array
试试用 Hashie 嵌套
relates = { :s1 => [:s2], :s2 => [:s3], :s4 => [:s5, :s9], :s5 => [:s6, :s8], :s6 => [:s7], } def foo(department, relates) return department if not relates[department] [department, relates[department].map{|e| foo e, relates}] end p foo :s1, relates # [:s1, [[:s2, [:s3]]]] p foo :s4, relates # [:s4, [[:s5, [[:s6, [:s7]], :s8]], :s9]]