为了用一些值填充一个序列,这就是我想出的:
(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)
我很好奇是否有更短的习语可以做到这一点,而且可能更有效。
最佳答案
是的,这是填充序列分区的惯用方法。事实上,该代码与 part of the partition function in clojure.core 非常相似。不同之处在于 partition
不假设单个填充值,而是要求一个序列:
核心.clj:
([n step pad coll]
(lazy-seq
...
(list (take n (concat p pad))))))))
您可以通过将填充集合传递给分区来获得相同的结果:
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)
关于clojure - 填充序列的习语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262268/