要填充具有某些值的序列,这就是我想出的:
(defn pad [n coll val]
(take n (concat coll (repeat val))))
(pad 10 [1 2 3] nil) ; (1 2 3 nil nil nil nil nil nil nil)
Run Code Online (Sandbox Code Playgroud)
我很好奇是否有一个较短的成语,已经这样做,也许更有效率.
是的,这是一个关于序列的填充分区的惯用方法.事实上,该代码与clojure.core中的分区函数的一部分非常相似,不同之处在于partition不假设单个填充值而是要求序列:
core.clj:
([n step pad coll]
(lazy-seq
...
(list (take n (concat p pad))))))))
Run Code Online (Sandbox Code Playgroud)
通过将填充集合传递给分区,可以获得相同的结果:
user> (defn pad [n coll val]
(take n (concat coll (repeat val))))
#'user/pad
user> (pad 10 [1 2 3] nil)
(1 2 3 nil nil nil nil nil nil nil)
user> (first (partition 10 10 (repeat nil) [1 2 3]))
(1 2 3 nil nil nil nil nil nil nil)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |