たまに乱数の数列を作ることがありますが、数列作るときはランタイムで乱数を作っているので var でとりあえず仮の数列をつくって、その後 for ループで乱数作りながら仮数列に入れていく人もいるかもしれませんが、まあ目的は達成できますが一旦つくったら定数として扱いたいときは var で作るのは気持ち悪いですよね…というわけで、実は .map を使えば一発で let で乱数の数列が作れちゃうのです♪
やり方はとても簡単です。例えば -50 ..< 50 の範囲で10個の乱数を作りたいときは、以下のように書けば作れます:
let randomIntArray = [Int](count: 10, repeatedValue: 0).map { (some: Int) -> Int in
let randomUInt = arc4random_uniform(100) // 0 ..< 100 の乱数を作る
return Int(randomUInt) - 50
}
ソースコードでもうお分かりかと思いますが、やってることはとりあえず一旦10個の要素がある [Int] の配列を一旦つくって、その後 .map で同じ要素数の新しい配列を作って中身を乱数で代入するという単純なことです。まあぶっちゃけ一旦 var と for ループで仮数列を作ってその後本数列を let で仮数列と同じ中身で作るのと一緒ですけど、書き方としてはかなりシンプルになります。
(ちなみにお分かりかと思いますが .map は元の配列の中身を弄らずに新しい配列を作る関数です。mutating func ではありません)
ところが乱数はいいんですけど、逆に等差数列、たとえば [0, 1, 2, 3...] の数列を let で作りたいときはどうすればいいだろ…
========= 追記 =========
いやー俺アホだった… [0, 1, 2, 3...]の数列は
[Int](0 ..< 10)
で作れるじゃん…