(defn add-path [h path] (let [dir (butlast path) entry (last path)] (update-in h dir (fn [x] (if x (conj x entry) [entry])))))
(defn restore-hierarchy [paths] (reduce add-path {} paths)) Then (restore-hierarchy [["top" "level" "file1"] ["top" "level" "file2"] ["top" "level2" "file3"]]) => {"top" {"level2" ["file3"], "level" ["file1" "file2"]}} -- Juha Arpiainen On May 5, 3:40 pm, Steffen <steffen.die...@gmail.com> wrote: > Hello, > > I'm trying to come up with a way to recreate a directory hierarchy. Entries > within zip archives are just flat strings like "top/level/file1", but I > would like to operate on them hierarchically. So my problem could be stated > as: > If > > (restore-hierarchy [["top" "level" "file1"] ["top" "level" "file2"] ["top" > "level2" "file3"]]) > > returns > > {"top" {"level" ("file1" "file2"), "level2" ("file3")}} > > what does a nice definition of #'restore-hierarchy look like? Sadly my own > attempts to hack it are too embarrassing to post them here... > > Thanks, > > Steffen -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en