2016-07-14 91 views
-2

我的S3文件的路径列表的形式像红宝石动态哈希键

a/b/c 
a/b/c/d.txt 
a/d/e.txt 

一个桶是有办法,我可以创建上述信息的JSON表示,我正在寻找类似

{:a=>{:b=>{:c=>[d.txt]},:d=>[e.txt]}}

我已生成使用eval的动态密钥的名字,但我不能做

eval(a[:b]X) where X is something like [:c]

在此先感谢

+0

你有一个字符串数组,每个字符串的意思是文件路径? –

+0

它可能指向一个文件夹或一个文件 – Subash

+2

我有点不清楚你要求什么。将字符串列表转换为此哈希对象的方法?给定一个S3桶来生成这个哈希对象的方法?定义显示/添加/从文件名列表中删除的方法的类?而且,为什么你要将文件夹转换为符号;我认为他们会更好地留下来作为字符串。 –

回答

2
files = %w(a/b/c.txt a/b/c/d.txt a/d/e.txt) 
files.reject do |f| # first of all, remove redundant dirs 
    files.any? { |ff| ff != f && ff.start_with?(f) } 
end.each_with_object({}) do |f, memo| 
    *path, file = f.split('/') 
    bucket = path.inject(memo) { |acc, k| acc[k] ||= {} } 
    (bucket[:files] ||= []) << file 
end 
#⇒ { 
# "a" => { 
# "b" => { 
#   "c" => { 
#  :files => [ 
#   [0] "d.txt" 
#  ] 
#  }, 
#  :files => [ 
#  [0] "c.txt" 
#  ] 
# }, 
# "d" => { 
#  :files => [ 
#  [0] "e.txt" 
#  ] 
# } 
# } 
# }