小编Bra*_*man的帖子

使用懒惰的字符串集合在clojure中进行分区

从一组字符串开始,如:

(def str-coll ["abcd" "efgh" "jklm"])
Run Code Online (Sandbox Code Playgroud)

目标是从字符串集合的头部提取特定数量的字符,生成分区的字符串分组.这是所需的行为:

(use '[clojure.contrib.str-utils2 :only (join)])
(partition-all 3 (join "" str-coll))

((\a \b \c) (\d \e \f) (\g \h \j) (\k \l \m))
Run Code Online (Sandbox Code Playgroud)

但是,使用整个集合的连接力评估,这会在处理非常大的字符串集合时导致内存问题.我的具体用例是通过解析大型分隔记录文件生成的惰性集合生成字符串子集:

(defn file-coll [in-file]
  (->> (line-seq (reader in-file))
    (partition-by #(.startsWith ^String % ">"))
    (partition 2))))
Run Code Online (Sandbox Code Playgroud)

并且正在建立上一个问题的工作.我已经尝试了reduce,partition和join的组合,但是无法提出正确的咒语从第一个字符串的头部拉出字符并根据需要懒惰地评估后续字符串.非常感谢任何想法或指示.

clojure lazy-evaluation

5
推荐指数
1
解决办法
1037
查看次数

标签 统计

clojure ×1

lazy-evaluation ×1