是否有更优雅的方式让into
使用单个项目和列表而不是以下(当然是残暴的)功能?
(defn into-1-or-more
[this-list list-or-single]
(into this-list (flatten (conj [] list-or-single))))
哪个可以处理:
(into-1-or-more [1 2 3 4] 5)
;[1 2 3 4 5]
或者:
(into-1-or-more [1 2 3 4] [5 6 7 8])
;[1 2 3 4 5 6 7 8]
我正在构建一个集合,使用into []
来减少列表中函数的结果。但是,某些功能会返回单个项目,而其他功能会返回项目列表。像:
(reduce #(into [] (% data)) [func-return-item func-return-list func-return-either])
最好的解决方案是做以下事情吗?
(into [] (flatten (map #(% data) [func-return-item ...])
答案 0 :(得分:3)
虽然知道你得到的返回类型会更加理想,但这里有一个简单的答案:
(flatten [ curr-list (mystery-fn) ] )
示例:
(flatten [[1 2 3] 9 ] )
;=> (1 2 3 9)
(flatten [[[1] 2 3] [4 5] 6 ] )
;=> (1 2 3 4 5 6)
如果你愿意,你可以把它包装成一个函数,但似乎没什么必要的。