2012-02-29 6 views
2

私は、アイテム名とベクトル文字列の項目を格納するベクトルのベクトルのマップを持っています。このマップをいくつかのヒントに解析しようとしていますdefpartialsカテゴリ別に整理して表示することができます。アイテムのマップ - >カテゴリ - ベクトルをカテゴリリストに解析する

私がする必要があると思うのは、すべての可能なカテゴリとサブカテゴリを作成するために地図を一度解析することです。私がそれを持っていれば、それを繰り返すことができ、すべてのマッチをメインマップからフィルタリングして、適切なキーストリングを得ることができます。

下の地図から、すべてのメインカテゴリとサブカテゴリのセットに移動するにはどうすればよいですか?一度私はそのセットを持って、どのようにキーではなく、値で元のマップを照会するのですか?

ありがとうございました!

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

目標

(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 
+0

ITEM-カテゴリーの定義が最後に閉じ括弧が欠落しています。私はそれを修正するつもりでしたが、SOは1文字の編集をバウンスします。あなたはそれを変更できますか? – user100464

答えて

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

素晴らしい!これは私が必要とするものです。ありがとうございました –

+1

'(cons k rv)[k])'を '(cons k(r v nil))'に置き換えることができませんでしたか? – Retief

+0

Ret Retありがとうございます。実際には '(cons k(r v))'を使うことができます。私は私の答えを更新します。 – user100464

1

私は私の自己は、私の心はzipper libraryあなたはITEM-CATECORIESを取ると、それのジッパーを構築できるにジャンプアップとダウンネストされたデータ構造を行くことについて考えて見つけます木を上下に「ジッパー」することによって、任意の数の関係を作成します。

+0

ありがとう、私はジッパーのライブラリをチェックアウトしていないが、これは非常に便利です。 –

関連する問題