当前位置:  开发笔记 > 小程序 > 正文

在clojure中对数字序列进行分区

如何解决《在clojure中对数字序列进行分区》经验,为你挑选了1个好方法。

我有以下输入:

(def nums [123456789012 123456789012])

我想要以下输出:

[[1234 5678 9012] [1234 5678 9012]]

*注意这两个序列都包含数字而不是字符串......

我认为通过执行以下操作会非常简单:

    将每个条目转换为String

    将每个字符串分区为4

    将每个分区转换回整数

这是我失败的尝试:

(defn split-nums [nums factor]
  (map
    #(map
       (fn [x] (Integer/valueOf (str x)))
       (partition factor (str %)))
  nums))

(println (split-nums nums, 4))

当我运行这个时,我收到以下错误:

Caused by: java.lang.NumberFormatException: For input string: "clojure.lang.LazySeq@4834333c"

这告诉我,我正在处理一个懒惰的序列,我需要强制评估,但当我尝试(str(doall x))我得到相同的结果.

所以我在哪里出错?这是一个好方法吗?BTW.我刚刚开始学习clojure,所以我当然不是专家.



1> Kintaro..:

为什么首先转换为String?这是一个带/和的版本mod.这也将修复您的前导零问题.

(defn int-partition [num size]
   (let [f (int (Math/pow 10 size))]
      (loop [n num l ()]
         (if (zero? n) 
            (vec l) 
            (recur (int (/ n f)) (conj l (mod n f)))))))

(defn split-nums [nums factor] (vec (map #(int-partition % factor) nums)))

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有