2016-03-26 13 views
1

[OneSix "、" FiveEight "、" FiveOneZero "]という結果がどうなっているのか分かりません。私が見るのは、それがリストを通ってマッピングされ、%記号が最初に数字を "Six"に評価するということです。だから、なぜ「One」は結果に「Six」の前に来るのでしょうか?辞書を使ってリストをマッピングしていますか?

この部分は私を混乱させる:

output = digitNames[number % 10]! + output 
    number /= 10 
let digitNames = [ 
0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four", 
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine" 
] 

let numbers = [16, 58, 510] 


let strings = numbers.map { 
(number) -> String in 
var number = number 
var output = "" 
while number > 0 { 
    output = digitNames[number % 10]! + output 
    number /= 10 
} 
return output 
} 
// strings is inferred to be of type [String] 
// its value is ["OneSix", "FiveEight", "FiveOneZero"] 

答えて

1

ループがどのように動作するか確認する最良の方法は、鉛筆と紙を一度にそれを介して一歩を動作するようです。

数字が123としましょう。その後、ループは次のように動作します:

var output = "" 
while number > 0 { 
    output = digitNames[number % 10]! + output 
    number /= 10 
} 
  • を初期反復output=""number=123
  • 前に最初の反復の後outputなり"Three"number becomes 12`
  • 2回目の繰り返しの後output"TwoThree"と数になります1
  • 最後の繰り返し後output bec omes "OneTwoThree"と番号が正しい順序を介して維持されるように、あまりにも、outputは前後から成長しているが、同時にnumberバックからフロントに「収縮」、すなわち0

となりますプロセス。

+0

ああ、そうですよ!基本的には、数字の数十、数百の場所を文字列形式に印刷することを繰り返しています。甘いおかげで! –

関連する問題