将两个Clojure列表压缩成一个连接字符串的列表

6

不需要通过zip映射两个列表来获取:

(zipmap ["a","b","c"] ["c","d","e"]) = {"c" "e", "b" "d", "a" "c"} 

我想要将第一个列表的第一个元素与第二个列表的第一个元素以此类推连接起来,得到:

("ce","bd","ac") 

或者按相反的顺序。
1个回答

12
你可以使用map实现这个功能。map可以接受多个集合,它会从每个集合中取出下一个元素,并将它们传递给作为第一个参数传递的函数(当其中一个集合用完时停止)。因此,你可以传入一个接受n个参数和n个集合的函数。
(map str ["a" "b" "c"] ["c" "d" "e"])

将首先使用"a"和"c"调用str,然后使用"b"和"d"调用,最后使用"c"和"e"调用。结果将为

("ac" "bd" "ce")

由于str可以接受可变数量的参数,因此可以与任何数量的集合一起使用。像传入四个集合:

(map str ["a" "b" "c"] ["d" "e" "f"] ["g" "h" "i"] ["j" "k" "l"])

将被评估为

("adgj" "behk" "cfil")

9
或者 (map str ["a" "b" "c"] ["c" "d" "e"]) - Brian Carper
好的回答。它依赖于了解map如何处理多个集合,这在教程中似乎并不总是被涵盖到。 - Adrian Mouat
即使 str 最多只需要两个参数,map strmap #(str % %2) 更好。当您可以直接传递现有函数时,应避免声明新函数。 - Mark Reed
@Mark:同意,重写以完全删除不必要的匿名函数。 - Nathan Hughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接