如何用序列中的多个元素替换元素的出现?

时间:2016-06-02 09:08:33

标签: clojure

所以,我有一个项目清单。我希望根据标准中的一组元素替换项目的每个匹配项。

理想情况下,map可以让你将N个元素的列表转换为N个元素的另一个列表,但是这里长度会随着我们在索引处插入更多元素而增加,其中我们将其他单个元素替换为元素列表。< / p>

2 个答案:

答案 0 :(得分:3)

正如@Lee所建议的那样,您可以使用mapcat来完成。

E.g:

(mapcat #(if (even? %) [% %] [%]) (range 10))

将导致:

=> (0 0 1 2 2 3 4 4 5 6 6 7 8 8 9)

答案 1 :(得分:1)

而不是map,您可以使用reduce,从空的累加器集合[]开始。

(reduce #(conj %1 (dec %2) %2)
        []
        [1 3 5 7])

所以在这里,从奇数[1 3 5 7]的集合开始,我们在序列中添加额外的偶数。输出是:

[0 1 2 3 4 5 6 7]