Processamento de pares de valores das duas sequências em Clojure
Pergunta
Eu estou tentando entrar na comunidade Clojure. Eu tenho trabalhado muito com Python, e uma das características que fazem uso extensivo de é o método zip (), por iteração sobre pares de valores. Existe uma maneira (inteligente e curto) de alcançar o mesmo em Clojure?
Solução
Outra maneira é simplesmente usar o mapa, juntamente com alguma função que recolhe os seus argumentos em uma sequência, como este:
user=> (map vector '(1 2 3) "abc")
([1 \a] [2 \b] [3 \c])
Outras dicas
(zipmap [:a :b :c] (range 3))
-> {:c 2, :b 1, :a 0}
iteração sobre mapeia acontece em pares, por exemplo, assim:
(doseq [[k v] (zipmap [:a :b :c] (range 3))]
(printf "key: %s, value: %s\n" k v))
impressões:
key: :c, value: 2
key: :b, value: 1
key: :a, value: 0
A pergunta foi respondida, mas ainda há interleave
, que também lida com um número arbitrário de seqüências, mas não grupo a seqüência resultante em tuplas (mas você pode usar partition
para isso).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow