在Clojure中处理两个序列的值对

8 投票
3 回答
2472 浏览
提问于 2025-04-15 12:19

我想加入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])

撰写回答