Pergunta

Eu tenho o mapa de nomes de itens e vetores de vetores que armazenam categorias que a chave de cadeia item está.Eu estou tentando analisar esse mapa em um par soluço defpartials e, em seguida, exibi-los organizados por categoria.

O que eu acho que eu preciso fazer é analisar o mapa de uma vez para fazer um conjunto de todas as possíveis categorias e sub-categorias.Uma vez que eu tenho que eu possa iterar que e filtrar todos os jogos do mapa principal para obter a chave de cadeias de caracteres.

Como posso ir a partir do mapa abaixo, para um conjunto de todos os principais e sub-categorias?Assim que eu tiver que definir, como eu faço para usar ele consulta o mapa original por valores e não por chave?

obrigado por qualquer ajuda!

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

objetivo sudo código

(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
Foi útil?

Solução

Eu não sei o que um defpartial é, mas isso vai transformar esse mapa:

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

Outras dicas

Quando eu encontrar o meu eu pensar em ir para cima e para baixo aninhadas estrutura de dados de minha mente salta para o zíper biblioteca você poderia tirar ITEM-CATECORIES e construir um zíper dele, em seguida, fazer qualquer número de relações por 'fechando' para cima e para baixo na árvore.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top