【问题标题】:Zip two lists in clojure into list of concatenated strings将 clojure 中的两个列表压缩到串联字符串列表中
【发布时间】:2011-10-27 21:08:27
【问题描述】:

而不是压缩映射两个列表来获取:

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

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

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

或以相反的顺序。

【问题讨论】:

    标签: list clojure


    【解决方案1】:

    您可以使用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"])
    • 好答案。它依赖于了解 map 如何处理多个集合,这似乎并不总是在教程中涵盖。
    • 即使str 最多接受两个参数,map str 也比map #(str % %2) 好。当您可以直接传入现有函数时,应避免声明新函数。
    • @Mark:同意,重写以完全删除不必要的匿名函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多