Paysage d'une carte de clojure d'éléments -> Catégories-Vecteurs dans des listes classées

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

Question

J'ai une carte des noms d'articles et des vecteurs de vecteurs qui stockent des catégories que l'élément de chaîne de clé se trouve. J'essaie d'analyser cette carte dans quelques défavortiaux Hiccup, qui peuvent ensuite les afficher organisés par catégorie.

Ce que je pense avoir besoin de faire est d'analyser la carte une fois pour créer une série de toutes les catégories et sous-catégories possibles.Une fois que je peux, je peux itérer cela et filtrer tous les matchs de la carte principale pour obtenir les cordes de touches appropriées.

Comment puis-je passer de la carte ci-dessous, à un ensemble de toutes les catégories principales et de sous-catégories?Une fois que je l'ai défini, comment l'utiliser est-il interrogé sur la carte d'origine par des valeurs non par la clé?

Merci pour une aide!

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

objectif dans le code 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

Était-ce utile?

La solution

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

Autres conseils

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top