Mam mapę nazw elementów i wektorów wektorów, które przechowują kategorie, w których znajduje się element ciągu klucza. Próbuję przeanalizować tę mapę na kilka elementów czkawki, które następnie mogą wyświetlić je według kategorii.

Myślę, że muszę raz przeanalizować mapę, aby utworzyć zestaw wszystkich możliwych kategorii i podkategorii. Kiedy już to mam, mogę to powtórzyć i odfiltrować wszystkie dopasowania z głównej mapy, aby uzyskać odpowiednie ciągi kluczy.

Jak przejść z mapy poniżej do zestawu wszystkich kategorii głównych i podkategorii? Kiedy już mam ten zestaw, jak mogę go używać do wysyłania zapytań do oryginalnej mapy według wartości, a nie według klucza?

Dzięki za pomoc!

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

Cel w kodzie 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
Jon Rose 1 marzec 2012, 01:39

2 odpowiedzi

Najlepsza odpowiedź

Nie wiem, co to jest destronatywna, ale to zmieni tę 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"]}
1
user100464 1 marzec 2012, 20:53

Kiedy zaczynam myśleć o poruszaniu się w górę iw dół zagnieżdżonej struktury danych, mój umysł przeskakuje do Zipper biblioteka możesz wziąć ELEMENT-KATEGORIE i zbudować z nich suwak, a następnie utworzyć dowolną liczbę relacji, „spinając” w górę iw dół drzewa.

1
Arthur Ulfeldt 1 marzec 2012, 02:12