Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在分析项目的clojure映射->;将向量分类到分类列表中_Clojure_Compojure_Noir_Hiccup - Fatal编程技术网

正在分析项目的clojure映射->;将向量分类到分类列表中

正在分析项目的clojure映射->;将向量分类到分类列表中,clojure,compojure,noir,hiccup,Clojure,Compojure,Noir,Hiccup,我有项目名称和向量的映射,它们存储关键字符串项目所在的类别。我试图将这张地图解析成几个hiccup departials,然后可以按类别显示它们 我想我需要做的是对地图进行一次解析,以生成一组所有可能的类别和子类别。一旦我有了它,我就可以迭代并过滤主映射中的所有匹配项,以获得正确的键字符串 我怎样才能从下面的地图转到一组所有的主类别和子类别?一旦我有了这个集合,我如何使用它来查询原始地图的值而不是键 谢谢你的帮助 (def ITEM-CATEGORIES { "thingy"

我有项目名称和向量的映射,它们存储关键字符串项目所在的类别。我试图将这张地图解析成几个hiccup departials,然后可以按类别显示它们

我想我需要做的是对地图进行一次解析,以生成一组所有可能的类别和子类别。一旦我有了它,我就可以迭代并过滤主映射中的所有匹配项,以获得正确的键字符串

我怎样才能从下面的地图转到一组所有的主类别和子类别?一旦我有了这个集合,我如何使用它来查询原始地图的值而不是键

谢谢你的帮助

(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

当我发现自己在考虑上下嵌套的数据结构时,我的思维会跳到“你可以拿一个项目分类并构建一个拉链”,然后通过在树上下“拉链”来建立任意数量的关系。

我不知道defparticle是什么,但这将转换该映射:

(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"]}

谢谢,我还没有签出拉链库。这非常有用。你能不能用
(cons k(r v nil))替换
(如果让[rv(r v)](cons k rv)[k])
。事实上,我可以使用
(consk(rv))
。我将更新我的答案。项目类别的定义在末尾缺少一个右括号。我本来打算修复它,但会反弹一个字符的编辑。你能换一下吗?