0

次のような文字列の配列があります。

"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メソッドを使用してみましたが、うまくいきませんでした。基本的に私は次のようなフォルダ構造を作成する必要があります

  1. folder1
    • filea
      • x1.png
    • fileb
      • x2.png
  2. folder2

等々.....

どこから始めればいいのでしょうか?私はこの問題に取り組むのに大きな困難を抱えています。各配列でsplitメソッドを使用したので、配列の配列を取得しましたが、これはどこにも到達していないようです。サブツリーを通過するには再帰を使用する必要があると思いますか?

4

1 に答える 1

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"]}}}}}
于 2012-05-23T16:53:19.290 に答える