Ich versuche, einen Clojure-Vektor mit Werten aus einer Karte zu füllen. Ich habe einen anderen Vektor von bestimmten Schlüsseln in der Karte speichern die Werte, die ich brauche. Ich muss den Schlüssel-Vec durchlaufen, die Werte aus der Karte abrufen und sie in einem anderen Vektor speichern.Füllen Sie einen Clojure-Vektor
Ich habe versucht mit Schleife + recur:
(let [keys-vec (:keys-vec item)
my-map (:my-map item)]
(loop [newV []
i 0]
(if (< i (count keys-vec))
(recur
(conj newV (get my-map (get keys-vec i)))
(inc i))
newV)))
Und es funktionierte. Aber ich weiß, dass Clojure für seinen minimalistischen/effizienten Code-Schreibstil bekannt ist und ich wollte wissen, ob es einen besseren Weg gibt.
Irgendwelche Ideen?
Können Sie angeben, was Sie erreichen möchten? Wird '' def neues-vector existing-vector '' das Problem nicht lösen? – superkonduktr
Ich glaube, es ist nah an einem Anti-Muster in Clojure, um durch einen Vektor mit 'loop'- und Element-Indizes zu iterieren, da Clojures Sammlungen unveränderlich und beständig sind. Stattdessen werden Sie aufgefordert, reduzierende Funktionen zu verwenden. Der idiomatische Weg, um die Aufgabe zu erfüllen, wäre einfach "(Vals (Select-Keys My-Map Keys-Vec))". – superkonduktr
Sie haben recht, es hat funktioniert. Vielen Dank! –