アイテムのClojureマップの解析 - >カテゴリ - 分類リストへのベクトル
質問
私は、キーストリング項目が入っているカテゴリを格納するベクトルのアイテム名とベクトルのベクトルのマップを持っています。このマップをカップルで整理することができるカテゴリで表示できる、このマップをカップルに解析しようとしています。
私がする必要があると思うことは、すべての可能なカテゴリとサブカテゴリのセットを一度だけ解析することです。私がそれを繰り返すことができると、メインマップからすべての一致をフィルタリングして適切な鍵文字列を取得できます。
どのようにして、すべてのメインカテゴリとサブカテゴリのセットに行くことができますか?そのセットを持っていれば、それを使用するには元の地図をQueryではなくQuery?
助けてくれてありがとう!
(def ITEM-CATEGORIES
{ "thingy" [["CatergoryA" "SubcategoryA"]]
"thingy2" [["FFT"]]
"thingy3" [["Generators" "Chaotic"]]
"thingy4" [["Analysis" "Pitch"] ["MachineListening"]]
"thingy5" [["Multichannel" "Ambisonics"]]
}
.
Sudo Code の目標
(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.
所属していません StackOverflow