在Clojure中处理两个序列的值对
我想加入Clojure社区。我之前一直在用Python工作,里面有一个我经常用的功能,就是zip()方法,它可以用来遍历成对的值。在Clojure中,有没有什么聪明又简短的方法可以实现同样的功能呢?
3 个回答
3
这个问题已经有答案了,不过还有一个叫做 interleave
的东西,它可以处理任意数量的序列,但它不会把结果组合成元组(不过你可以用 partition
来做到这一点)。
4
(zipmap [:a :b :c] (range 3))
-> {:c 2, :b 1, :a 0}
遍历映射(map)时是成对进行的,比如这样:
(doseq [[k v] (zipmap [:a :b :c] (range 3))]
(printf "key: %s, value: %s\n" k v))
输出结果是:
key: :c, value: 2
key: :b, value: 1
key: :a, value: 0
12
另一种方法是简单地使用map,配合一个可以把参数按顺序收集起来的函数,像这样:
user=> (map vector '(1 2 3) "abc")
([1 \a] [2 \b] [3 \c])