Разбор карты clojure элементов -> категорий-векторов в категорированные списки - PullRequest
2 голосов
/ 01 марта 2012

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

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

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

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

(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

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Я не знаю, что такое 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"]}
1 голос
/ 01 марта 2012

Когда я обнаруживаю, что думаю о переходе вверх и вниз по вложенной структуре данных, мой разум переходит к библиотеке застежек-молний , вы можете взять ITEM-CATECORIES и построить ее на молнии, а затем установить любое количество отношений с помощью 'молния вверх и вниз по дереву.

...