clojure - 将项目 -> 类别向量的 clojure 映射解析为分类列表

标签 clojure compojure noir hiccup

我有项目名称的 map 和向量的向量,它们存储关键字符串项目所在的类别。我试图将此 map 解析为几个打嗝的默认部分,然后可以按类别组织显示它们。

我认为我需要做的是解析一次 map 以创建一组所有可能的类别和子类别。一旦我有了它,我就可以迭代它并过滤主映射中的所有匹配项以获得正确的键字符串。

如何从下面的 map 转到所有主类别和子类别的集合?一旦我完成了该设置,我如何使用它通过值而不是键查询原始 map ?

感谢您的帮助!

(def ITEM-CATEGORIES
 { "thingy"          [["CatergoryA" "SubcategoryA"]]
   "thingy2"         [["FFT"]]
   "thingy3"         [["Generators" "Chaotic"]]
   "thingy4"         [["Analysis" "Pitch"] ["MachineListening"]]
   "thingy5"         [["Multichannel" "Ambisonics"]]
 }

sudo 代码中的目标

(generate-hiccup-partial (create-set-of-unique-categories ITEM-CATEGORIES) ITEM-CATEGORIES)
....
(defpartial generate-hiccup-partial
  [categories map]
   ;; hiccup code
   (in-each-sub/main-category-get-keys-by-value categories map))  ;; return a list of all keys with the same categories

最佳答案

我不知道 defpartial 是什么,但这会改变该 map :

(defn xform [ic]
  (reduce (fn [result [k [vs]]]
        (reduce (fn [r v]
              (assoc r v (cons k (r v)))))
            result vs))
      {} ic))

user=> (xform ITEM-CATEGORIES)
{"SubcategoryA" ["thingy"], "CatergoryA" ["thingy"], "Ambisonics" ["thingy5"],
 "Multichannel" ["thingy5"], "Pitch" ["thingy4"], "Analysis" ["thingy4"],
 "Chaotic" ["thingy3"], "Generators" ["thingy3"], "FFT" ["thingy2"]}

关于clojure - 将项目 -> 类别向量的 clojure 映射解析为分类列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507071/

相关文章:

inheritance - 为什么 Clojure 核心库使用具体派生?

heroku - 减少 Heroku 上的 Clojure 启动时间(错误 R10)

clojure - 设置环防伪 CSRF header token

clojure - Compojure:陷阱 500 URL 解码错误

clojure - 访问 clojure webnoir 项目中的资源文件

clojure - Hiccup 中的条件句,我可以让这个更惯用吗?

clojure - 清理Clojure函数

clojure - 列出 compojure 中的所有路由

clojure - Compojure:在路由处理中访问基本身份验证变量

clojure - Noir - 在此上下文中无法解析符号 html5