2015-11-02 75 views
2

所以對於拆分成數位的,我發現這個代碼流迭代有人可以提供的這個示例代碼演練

def split(n: Int) = if (n == 0) List(0) else { 
    (Stream.iterate(n)(_/10)takeWhile(_!=0)map(_%10)toList) reverse 
} 

code

其作品,但我不能對自己如何解釋計算流程。任何人都可以更深入地瞭解它需要走中間步驟從

split(123) 
List[Int] = List(3,2,1) 

它似乎相當簡單,但讀取的方法聲明,併力圖將與計算器的例子我沒能重新創建自己的結果。

+1

在斯卡拉特別感興趣 - 每個人都可以有自己的意見,但我喜歡的語言,並希望在此進一步的信息。 – Barry

+0

@Barry我會強烈建議不使用中綴/後綴語法的非運營商的方法。這是至少有一點更容易地看到發生了什麼事情,如果你寫的'Stream.iterate(N)(_/10).takeWhile(_!= 0).MAP(_%10).toList.reverse'。 –

+0

@TravisBrownt謝謝,這是有道理的 - 我只是使用了我發現的那個舊郵件列表問題的代碼,但是我同意可讀性我更喜歡你寫的東西。 – Barry

回答

3

讓我們把它分成一個階段:

(Stream.iterate(n)(_/10) // n - is first number, _/10 is function that recursively applied on given number 
takeWhile(_!=0) // while result is not equal to 0 
map(_%10) // got a list of numbers and take it by mod 10 
toList) // transform to list 
reverse // take it in reverse order 

scala> (Stream.iterate(123)(_/10)).takeWhile(_!=0).toList 
res6: List[Int] = List(123, 12, 1) 
+0

所以使用實施例的n = 123它收率12.3,1.23,0.123,然後轉移到模量?再試圖用計算器再做12.3%10,1.23%10,.123%10我仍然無法創建3,2,1 – Barry

+0

稍微澄清了我的信息。它給123,(一十分之一百二十三)= 12,(10分之123)/ 10 = 1 – Rumoku

+0

感謝這是有意義的,現在 – Barry

相關問題