clojure - 填充序列的习语

标签 clojure sequences

为了用一些值填充一个序列,这就是我想出的:

(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/

相关文章:

f# - 在 fsharp 中获取序列中 n 到 n+x 处的元素

unit-testing - 如何在用 ring-mock 编写的 Clojure Web 应用程序测试中处理 session ?

clojure - 如何在启动时自动启动clojure应用程序

clojure - 十进制到二进制 Clojure

clojure - lein-cljsbuild 源 cljs 目录 -> 输出 js 目录?

python - 事后补充

r - 通过 WeightedCluster 包进行多 channel 序列分析

python - DNA 序列操作

java - 从类路径初始化 SUTime 的 JollyDayHoliday,ReflectionLoadingException : Error creating TimeExpressionExtractorImpl

sql-server - 重置序列