その他

Swift 色々なfor文の使い方

その他
この記事は約4分で読めます。

備忘録として記述

for

for j in 0..<5 {
    print(j)
}
//出力結果
0
1
2
3
4

for 降順表示

for k in (0 ..< 5) .reversed() {
    print(k)
}
//出力結果
4
3
2
1
0

break

for u in 1 ..< 10 { 
    if u % 2 == 0 {  //2で割り切れる数字が来たらループ処理を終了させる
        break
    }
    print(u)
}
//出力
1

continue

for v in 1 ..< 10 {
    if v % 2 == 0 {   //2で割り切れる場合は後の処理を行なわず、ループ処理の先頭へ戻す
        continue 
    }
    print(v)
}
//出力 
1
3
5
7
9

forEach

var numbers = [1,2,3,4,5]
//number内の1~5を順に出力
numbers.forEach{
    //$0は配列の要素
    print($0)
}
//出力結果
1
2
3
4
5

Stride

to 含まない

  • fromからtoまでの範囲のリストをbyで指定した刻み幅で生成する。
  • 生成されたリストに、toで指定した最終値は含まない。
//from...初期値 to...終了値 by...増分
for l in stride(from: 0, to: 10, by: 2) {
    print(l)
}

//出力  0から2ずつ増やしていく 10は含まない
0
2
4
6

through含む

  • fromからthroughまでの範囲のリストをbyで指定した刻み幅で生成する。
  • 生成されたリストに、throughで指定した最終値が含まれる。
//from...初期値 to...終了値 by...増分
for s in stride(from: 0, through: 10, by: 2) {
    print(s)
}

// 出力  0から2ずつ増やしていく 10を含める
0
2
4
6
8
10

enumerated

  • indexと要素を取り出せる
var texts : [String] = ["あか","あお","みどり"]

for (t,texts) in texts.enumerated() {
    print(t,texts)
}
// 出力 
0 あか
1 あお
2 みどり

map

print("配列の値を5倍にする")
let testArray = [1,2,3,4,5]
let newArray = testArray.map { $0 * 5 }  // $0は配列の要素
print(newArray) // [5, 10, 15, 20, 25]

map*$0*ってわかりにくいので引数に名前をつけてあげる

  • ↑のmapと同じ内容
print("配列の値を5倍にする")
let testArray = [1,2,3,4,5]
let newArray = testArray.map { index in index * 5 }  // $0の箇所を indexという引数にする
print(newArray) // [5, 10, 15, 20, 25]

Dictonary と map

let celsius = ["Tokyo":14.0, "Osaka":17.0, "Okinawa":26.0]
let fahrenheit = celsius.map { ($0.0, 1.8 * $0.1 + 32) }  // $0.0はkey,0.1はvalue
print(fahrenheit)

Dictonary + map

Dictonary + map $0.0 $0.1わかりにくいから引数名を割当てる

.0

Dictonary + map $0.0 $0.1わかりにくいから引数名を割当てる

.1わかりにくいから引数名を割当てる

let celsius = ["Tokyo":14.0, "Osaka":17.0, "Okinawa":26.0]
let fahrenheit = celsius.map { index,celsius in(index, 1.8 * celsius + 32) }  // $0.0のの箇所に"index" ,0.1の箇所に"celsius"配列の要素の変数を指定
print(fahrenheit)

//出力結果
[("Osaka", 62.6), ("Okinawa", 78.80000000000001), ("Tokyo", 57.2)]

compactMap

  • nil を含む配列から nil を取り除いた配列を取得する
let optionalNumberList: [Int?] = [1, 2, nil, 4, 5, nil]

let numberList = optionalNumberList.compactMap {index in index } //引数割り当てた ・・・$0でもいいかも

print(numberList) // [1, 2, 4, 5]
print(numberList.reduce(0,+)) // 15