見出し画像

Swiftでアプリ。- 作ってみよう。 for-in文

繰り返しをさせる命令です。while では条件を決めてその条件内でループ、繰り返しをしましたが、for-in文では数字で指定または配列の値を取り出して利用できたりします。

単純なものでは

for i in 1..<3
{
    print(i)
}

1
2

と出力されます。1から3以下と言う意味になります。1…3にすると1,2,3と出てきます(1から3という意味になります)。

for の後の"i"は暗黙的に"let"が入ります。C言語などではforの後の変数を定義しないと行けなかったりなどありますがSwiftでは省略されスッキリとしています。

そしてこの繰り返しを2つ使って掛け算をしてみます。九九の計算です。

for i in 1..<10{
    var line = ""
    for j in 1..<10{
        let n = i * j
        if n < 10{
            line += " "
        }
        line += " \(n)"
    }
    print(line)
}

このコードでは1から9の数字(1..<10)を使って連続的に掛け算しています。
i は"1"から
1*1,1*2,1*3 ・・・と計算していったものを変数"line"に入れていきます。まず"1"が終わった時点で

print(line)

で出力されます。1行ずつできていきます。"1"のみ実行してみましょう。"i"を1のみ実行するようにします。

for i in 1..<2

これで実行すると

for i in 1..<2{
    var line = ""
    for j in 1..<10{
        let n = i * j
        if n < 10{
            line += " "
        }
        line += " \(n)"
    }
    print(line)
}

1 2 3 4 5 6 7 8 9

と出てきます。1のみ1から9を掛け算した結果です。九九はこれの繰り返しとなるわけです。

if n < 10{
  line += " "
}

このコードについては10以下の場合は一桁なので2桁の数字し合わせるように" "空白を入れるようになっています。

そして

line += " \(n)"

1行を変数"line"に"n"に入った数字を入れていくのですが、見栄えのいいようにこれも空白をいれ改行(\(n))しています。

これで

  1  2  3  4  5  6  7  8  9
  2  4  6  8 10 12 14 16 18
  3  6  9 12 15 18 21 24 27
  4  8 12 16 20 24 28 32 36
  5 10 15 20 25 30 35 40 45
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81

綺麗に並んだ計算結果が出てくるというわけです。


for-in文では条件をつけて実行もできます。

for i in 1..<24 where i % 3 != 0 &&  i % 2 != 0{
    print(i,terminator: " ")
}

whereで条件付しています。3で割り切れるもの、2で割りきれるものを除外しています。

"!="は"="の否定形なので同じでないものという意味になります。条件としては"3"で割っても"0"にならないもの、"2"で割っても"0"にならないものが条件となり割って"0"になりものは除外されます。

1 5 7 11 13 17 19 23

と出力されます。

そしてよく使う機能として配列の値を取り出して使うこともできます。

let name = "Taro"

let array = ["Hanako","Jiro","Taro","Sabro"]

for j in array.enumerated(){
    if name == j{
        print("\(j) 発見")
        break
    }
}

これで配列の値を一つずつ取り出して変数nameと比較して同じであれば名前を出力します。

配列のインデックスを取り出したい場合は"enumerated()"を使います。

array.enumerated()

let name = "Taro"

let array = ["Hanako","Jiro","Taro","Sabro"]


for (i,j) in array.enumerated(){
    if name == j{
        print("\(j) 発見")
        print("インデックス \(i)")
        break
    }
}

for のあとの変数も(i,j)と2つ指定します。前にはインデックス、後ろには配列の値が入ります。

これで

Taro 発見
インデックス 2

と出てきます。

この記事が気に入ったらサポートをしてみませんか?