【发布时间】:2016-06-02 17:41:52
【问题描述】:
所以,我有一个项目清单。我想根据条件用一组元素替换每个出现的项目。
理想情况下,map 可以让您将一个包含 N 个元素的列表转换为另一个包含 N 个元素的列表,但这里长度会随着我们在索引处插入更多元素而增加,在该索引处我们将其他单个元素替换为一个元素列表。
【问题讨论】:
-
你能举个例子吗?听起来你想要
mapcat。
标签: clojure
所以,我有一个项目清单。我想根据条件用一组元素替换每个出现的项目。
理想情况下,map 可以让您将一个包含 N 个元素的列表转换为另一个包含 N 个元素的列表,但这里长度会随着我们在索引处插入更多元素而增加,在该索引处我们将其他单个元素替换为一个元素列表。
【问题讨论】:
mapcat。
标签: clojure
按照@Lee 的建议,您可以使用mapcat 来实现。
例如:
(mapcat #(if (even? %) [% %] [%]) (range 10))
将导致:
=> (0 0 1 2 2 3 4 4 5 6 6 7 8 8 9)
【讨论】:
除了map,您可以使用reduce,从一个空的累加器集合[]开始。
(reduce #(conj %1 (dec %2) %2)
[]
[1 3 5 7])
所以在这里,从奇数集合[1 3 5 7] 开始,我们将额外的偶数添加到序列中。输出是:
[0 1 2 3 4 5 6 7]
【讨论】: