我有一个类似于:
的字符串数组“folder1 / filea / x1.png”,“folder1 / fileb / x2.png”,“folder2 / folder3 / filec / x3.png”.....
我的目标是创建一个向下钻取菜单,如:http://iwantaneff.in/repo/plugins/menu-nav/drill.down/index.html
在rails中我尝试过使用group_by方法,但没有运气。 基本上我需要创建一个像
这样的文件夹结构依旧.....
知道从哪里开始?我在解决这个问题时遇到了很大困难。我在每个数组上都使用了split方法,所以我得到了一个数组数组,但这似乎没有得到任何结果。我想我需要使用递归来遍历子树?
答案 0 :(得分:4)
答案很简单)使用递归来解析和插入数据
解析的例子=>
def parse(hash)
hash.each do |k,v|
files = v.select{|e| e.size == 1}
hash[k] = {"files" => files.flatten} unless files.empty?
dirs = v - files
unless dirs.empty?
dirs = parse(dirs.group_by{|e| e.shift})
if files.empty?
hash[k] = dirs
else
hash[k].merge! dirs
end
end
end
end
输入
h = {:root => ["folder1/filea/x1.png", "folder1/fileb/x2.png","folder1/fileb/folder4/111", "folder2/folder3/filec/x3.png","folder2/folder3/filec/x4.png"].map{|e| e.split("/")}}
parse(h)
输出
{:root=>{"folder1"=>{"filea"=>{"files"=>["x1.png"]}, "fileb"=>{"files"=>["x2.png"], "folder4"=>{"files"=>["111"]}}}, "folder2"=>{"folder3"=>{"filec"=>{"files"=>["x3.png", "x4.png"]}}}}}