2016-07-14 142 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" 
#  ] 
# } 
# } 
# }