Ich versuche, in die Clojure-Community zu gelangen. Ich habe viel mit Python gearbeitet, und eines der Features, die ich ausgiebig nutze, ist die zip() -Methode, um über Paare von Werten zu iterieren. Gibt es einen (cleveren und kurzen) Weg, um dasselbe in Clojure zu erreichen?Verarbeitung von Paaren von Werten aus zwei Sequenzen in Clojure
Antwort
Ein anderer Weg ist einfach Karte zu verwenden, zusammen mit einigen Funktion, die ihre Argumente in einer Folge sammelt, wie folgt aus:
user=> (map vector '(1 2 3) "abc")
([1 \a] [2 \b] [3 \c])
(zipmap [:a :b :c] (range 3))
-> {:c 2, :b 1, :a 0}
Iterieren über Karten geschieht paarweise, z. wie folgt aus:
(doseq [[k v] (zipmap [:a :b :c] (range 3))]
(printf "key: %s, value: %s\n" k v))
druckt:
key: :c, value: 2
key: :b, value: 1
key: :a, value: 0
Ich testete den Ansatz, und es konnte nicht drei oder mehr Sequenzen verarbeiten. Ich hätte diese Anforderung in der ersten Frage erwähnen müssen, sorry. – Thomas
Die Frage wurde beantwortet, aber es gibt immer noch interleave
, das auch eine willkürliche Anzahl von Sequenzen behandelt, aber die resultierende Sequenz nicht in Tupel gruppiert (aber Sie können partition
für th verwenden beim).
Dieses Beispiel konnte drei Sequenzen verarbeiten, danke. – Thomas