2

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

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

如何从下面的地图转到一组所有主要和子类别?一旦我有了那个设置,我如何使用它通过值而不是键来查询原始地图?

谢谢你的帮助!

(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
4

2 回答 2

1

我不知道 defpartial 是什么,但这将改变该地图:

(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"]}
于 2012-02-29T22:21:13.240 回答
1

当我发现自己在考虑上下嵌套数据结构时,我的思绪会跳到拉链库,您可以使用 ITEM-CATECORIES 并构建它的拉链,然后通过在树上上下“拉动”来建立任意数量的关系。

于 2012-02-29T22:12:12.680 回答