【发布时间】:2011-10-27 21:08:27
【问题描述】:
而不是压缩映射两个列表来获取:
(zipmap ["a","b","c"] ["c","d","e"]) = {"c" "e", "b" "d", "a" "c"}
我想将第一个列表的第一个元素与第二个列表的第一个元素连接起来,依此类推得到:
("ce","bd","ac")
或以相反的顺序。
【问题讨论】:
而不是压缩映射两个列表来获取:
(zipmap ["a","b","c"] ["c","d","e"]) = {"c" "e", "b" "d", "a" "c"}
我想将第一个列表的第一个元素与第二个列表的第一个元素连接起来,依此类推得到:
("ce","bd","ac")
或以相反的顺序。
【问题讨论】:
您可以使用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")
【讨论】:
(map str ["a" "b" "c"] ["c" "d" "e"])
str 最多接受两个参数,map str 也比map #(str % %2) 好。当您可以直接传入现有函数时,应避免声明新函数。