Swift 的、むずかしそうなテーマですね。
MasakiHori さんのスタイルもそれらしいと思いますし、または for
文でも where
を使った Swift 的な書き方もあるので紹介しておきますね。
やっていることの趣旨は LaserBit さんの "追加" と同じです。せっかくなのでもうひとつの例として、開始インデックスが 0 ではない場合を想定したコードも含めておきます。
swift
1let a = [0, 1, 2, 0, 5, 10, 0, 0, 7]
2
3func intToText(_ int: Int) -> String {
4
5 return String(describing: int)
6}
7
8for (offset, value) in a.enumerated() where value >= 1 {
9
10 // Swift の Array は 0 から始まるインデックスですが、
11 // ここでは 0 から始まるとは限らない ArraySlice も想定して、
12 // 安全のため startIndex から offset 離れた位置を取得している例を紹介します。
13 let index = a.startIndex.advanced(by: offset)
14
15 print(intToText(index))
16}
17
または、インデックスに注目する場合に indices
を使う方法もあるかもしれません。
フィルターの条件で a[$0]
と再び a
を書かないといけないところが(うっかり間違えそうで)なんとなく不安な気もしますけれど、この書き方ならインデックスに着目していることが明瞭になるのと enumerated
の offset
と Array
のインデックスが たまたま両方 0 から始まる という事実を使わず、確実に インデックス の値で扱えるため、不確かさが紛れ込まないのは大きな利点に思います。
今回みたいに "Array<Int>
" を想定している限りはそこまで配慮は不要ですけれど。
swift
1a.indices
2 .filter { a[$0] >= 1 }
3 .forEach { print(intToText($0)) }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/03 14:03
退会済みユーザー
2017/11/05 09:06