Quels sont les moyens concis / élégants de mettre dans une paire de la carte de clé de carte pour laquelle les conditions correspondantes sont vraies?
C'est pour traduire p> ou p> ou p> dans p> Je pense utiliser "Réduire" avec "Si" dans sa Lambda mais s'intéresse aux voies plus concises / belles / élégantes / idiomatiques. P > p>
4 Réponses :
(def conditions [true false true] ) (def keys [:key1 :key2 :key3]) (def vals ["value1" "value1" "value3"]) (defn testpair [cond key val] (when cond {key val})) (apply merge (map testpair conditions keys vals))
Pour être honnête imo, la version avec Réduire code> et
si code> est déjà le plus élégant et idiomatique grève> Voir commentaire de Nickik ci-dessous.
(def c [true false true])
(def k [:a :b :c])
(def v ["v1" "v2" "v3"])
(def coll (interleave c k v))
MHH sympa. Je suis venu avec quelque chose d'un peu mieux (je pense): (dans {} (pour [[[[C K V] (partition 3 Coll): quand c] [k v]))
Ah je savais qu'il y a une meilleure façon d'obtenir une carte dans une liste de vecteurs de la valeur clé :)
Je pense que l'exemple de réduction est mauvais parce que c'est vraiment difficile à lire. Utiliser 'pour' est probablement meilleur dans ce cas.
@nickik, pourriez-vous faire la réponse de votre commentaire? Je ne peux pas accepter un commentaire.
Je penserais d'abord à cela comme comment être le meilleur possible de vos opérations fonctionnelles sur un flux:
qui ressemble à: p> ou si vous vous sentez filé: p> i Je ne suis pas sûr que c'est élégant ou concis, mais je pense que c'est facile à lire. Notez que si vous traitez fréquemment des données dans cette forme, vous pouvez trouver que des étapes tels que (partition 3 Coll) ou (premier%) peuvent être des fonctions réutilisables utiles à leur droite menant à quelque chose comme: P> (defn condition-group [coll] (partition 3 coll))
(defn condition [group] (first group))
(defn but-condition [group] (drop 1 group))
(defn kv-map [kv-pairs] (apply hash-map (flatten kv-pairs)))
(->> coll
condition-group
(filter condition)
(map but-condition)
kv-map)
(into {} (for [[c k v] (partition 3 coll) :when c] [k v])) Based on the 'for'-Version from Kintaro but a little shorter.