获取数字的每个数字的惯用法

时间:2014-03-31 20:32:24

标签: clojure

获取数字的每个数字并将它们放入序列的惯用方法是什么?

目前我正在做

(map #(Integer/parseInt %) (map str ((comp seq str) 123456)))

,这有点难看......

有什么想法吗?

4 个答案:

答案 0 :(得分:6)

(for [n  (str 123456)] 
     (- (byte n) 48))

答案 1 :(得分:4)

我认为用懒惰的顺序写这个很好,即使你实际上不能使用懒惰,因为你是从错误的"端:

(defn digits [x]
  (rseq (mapv #(rem % 10)
              (->> x
                   (iterate #(quot % 10))
                   (take-while pos?)))))

如果你愿意,你可以写一个不使用mapv或rseq的数字*,然后懒惰地按顺序返回数字。

答案 2 :(得分:4)

 (map #(Character/getNumericValue %) (str 123456))

答案 3 :(得分:3)

怎么样:

(defn digits
    [x]
    (if (< x 10)
        [x]
        (conj (digits (quot x 10))
              (rem x 10))))

user=>(digits 123456)
[1 2 3 4 5 6]