2014-03-31 49 views
2

獲取數字的每個數字並將它們放入序列中的習慣用法是什麼?獲取數字的每個數字的習慣方式

目前我正在做

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

,這是有點難看......

任何想法?

+0

聽起來像是有人在工作的一個PCG謎:) – SirBraneDamuj

+0

呃......什麼是PCG的難題? :) – albusshin

+0

http://codegolf.stackexchange.com/questions/25003/sort-a-number-sorta – SirBraneDamuj

回答

5
(for [n (str 123456)] 
    (- (byte n) 48)) 
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] 
4

我覺得這是很好的懶序列寫這篇文章,即使你不能真正使用的懶惰,因爲你從「錯誤」最終構建它:

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

如果你想要的話,你可以寫一個不使用mapv或rseq的數字*,並且延遲地以倒數的順序返回數字。

+0

我喜歡你的風格更好,但對我來說運行速度更慢。有沒有辦法加快這一點? – galdre

+0

我無法想象這是任何合理的Clojure應用程序的瓶頸。誰在乎它是不是快速發展? – amalloy

+0

沒人!但我發現,作爲一種學習練習,當我嘗試加快速度時,我學到了很多東西。 – galdre

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