算法 如何由一个数组得到新的级联数组

chucai · 2012年08月24日 · 最后由 reus 回复于 2012年08月24日 · 2746 次阅读

条件: 有一个普通的数组 [s1, s2, s3, s4... sn] si 的意思是表示一个部门,部门与部门之间,存在上下级的关系。 输出:

[ 
   [s1, [s2, s3] ], 
   [s4, 
       [  
          [s5, [s6, s7], s8],
          s9
       ]
   ]   
]

[s1, [s2, s3] ] 表示的意思是 s2 ,s3 都是 s1 的子部门

这个用 hash 更好吧

这个表示方式太罗嗦,而且你写出来的也是错的 按照 [部门,[子部门 1, 子部门 2, ...]] 这个表达方式,[s5, [s6, s7], s8]是什么意思? 如果是 s6, s8 是 s5 的子元素 s7 是 s6 的子元素 那应该写成 [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]]

需要 登录 后方可回复, 如果你还没有账号请 注册新账号