Разборка Clojure карта предметов -> Категории - векторы в категорированные списки

StackOverflow https://stackoverflow.com/questions/9507071

Вопрос

У меня есть карта названий элементов и векторов векторов, в которых хранятся категории, которые входят в ключевую строку. Я пытаюсь разобрать эту карту в пару Defparties Defparties, которые затем могут отображать их организованным по категориям.

Что я думаю, мне нужно сделать, это разбирать карту один раз, чтобы сделать набор всех возможных категорий и подпунктов.Как только у меня есть то, что я могу повторить это и фильшить все спички с главной карты, чтобы получить правильные ключевые строки.

Как я могу пойти с карты ниже, к набору всех главных и подпунктивных категорий?Как только у меня есть этот набор, как использовать его запросить оригинальную карту по значениям, а не ключом?

Спасибо за любую помощь!

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

Это было полезно?

Решение

I do not know what a defpartial is, but this will transform that 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"]}

Другие советы

When I find my self thinking about going up and down nested data structure my mind jumps to the zipper library you could take ITEM-CATECORIES and build a zipper of it then make any number of relations by 'zipping' up and down the tree.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top