Y a-t-il un moyen de déstructurer une paire de valeur clé? J'ai une fonction qui prend une carte en tant que paramètre, j'aimerais extraire la valeur de la clé et de la valeur dans les paramètres elles-mêmes. Comment je fais ça ? p>
Je peux faire ce qui suit avec un vecteur - p>
((FN [[[A B]] (STR A B)) [A B]) P> blockQuote>
Comment puis-je faire la même chose / similaire à la carte - p>
(((fn [{k v}] (str k v)) {k v}) p> blockQuote>
merci, Murtaza p>
3 Réponses :
La destruction de la carte des fonctions Les listes Ag sont conçues pour extraire certaines touches d'une carte et leur donner des noms comme: je recommande Ce tutoriel . Il est un peu difficile de donner un équivalent direct à Si vous souhaitez choisir arbitrairement la première entrée de la carte, vous pouvez l'extraire et utiliser le formulaire de la liste de la liste sur une seule entrée de carte: P> ((FN [{kv}] (str kv)) {kv}) code> parce que la carte pourrait avoir de nombreuses clés et de nombreuses valeurs afin que le code désttructurant puisse Soyez incapable de dire quelle clé et votre valeur que vous recherchez. La déstructuration par clé est plus facile à motiver. p> core> (defn foo [[k v]] {v k})
#'core/foo
core> (foo (first {1 2}))
{2 1}
Il est également idiomatique et pratique pour attribuer des valeurs de carte automatiquement aux symboles correspondant aux noms de clés. Ceci est écrit comme ceci: (defn foo [{: touches [A B]}] (STR A B)) code>. Ensuite, à la fonction Call: (foo {: A 1: B 2}) code>. Cela retournera "12" code>.
Le deuxième exemple est vraiment utile lors du traitement de toutes les paires de clé / valeur sur une carte, car la vision de SEQ d'une carte est une liste des paires de touches / de valeur. Par exemple. (Carte (FN [[K V]] (PrintLn K V)) My-Map)
user=> (for [x (hash-map :a 1 :b 2 :c 3)] (str (first x) " " (second x)))
(":a 1" ":c 3" ":b 2")
La question concerne de structure une carte code> pas sur concat d'abord 2 éléments d'un ensemble code>
Son exemple ci-dessus a fonctionné avec mon code ... Pouvez-vous me montrer que ce n'est pas?
Le code exemple n'est qu'un exemple d'une carte avec 1 paire de valeurs de clé, qu'en est-il de la carte transcédente contient 5 paires de clé / valeur, comment votre code gère-t-il? EX: Carte {: Nom "Superman": Age 1000: Job "Super-héros"}, nous devons désormais déshabiller toutes les trois clés et leur valeur ... Remarque: la destructure ne pas extraire manuellement
Il n'a pas dit que c'était sa question. Son exemple est un simple {A B}. Le codage concerne la résolution de problèmes: p
Le codage est sûr de la résolution de problèmes, mais la première étape commence par la compréhension du problème :)
Touche. Merci pour le défi.
Il existe des raccourcis disponibles pour la déstructuration des cartes. Par exemple, si vous recherchez des touches spécifiques, vous n'avez pas à saisir Nom1: Key1 Nom1: Key2 ...
EG P>
(defn fbb [{foo :foo bar :bar baz :baz}] (+ foo bar baz))
Je ne sais pas ce qu'Ankour parle, mais essayez ceci Stackoverflow.com/questions/12505603/...