2

キー文字列アイテムが含まれるカテゴリを格納するアイテム名とベクトルのベクトルのマップがあります。このマップをいくつかのしゃっくりのdefpartialsに解析して、カテゴリ別に整理して表示しようとしています。

私がする必要があると思うのは、マップを1回解析して、すべての可能なカテゴリとサブカテゴリのセットを作成することです。それができたら、それを繰り返し、メインマップからすべての一致をフィルタリングして、適切なキー文字列を取得できます。

以下のマップから、すべてのメインカテゴリとサブカテゴリのセットに移動するにはどうすればよいですか?そのセットを取得したら、キーではなく値で元のマップをクエリするにはどうすればよいですか?

助けてくれてありがとう!

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

2 に答える 2

1

ネストされたデータ構造を上下することを考えていると、私の心はジッパーライブラリにジャンプします。アイテムカテゴリを取得してそのジッパーを作成し、ツリーを上下に「ジッパー」することで任意の数の関係を作成できます。

于 2012-02-29T22:12:12.680 に答える
1

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"]}
于 2012-02-29T22:21:13.240 に答える