Swiftでfor-in文でindexを使いたい時の方法まとめ

for-in文はSwiftでループ処理を行うためのコードです。for-in文だけではありませんがループ処理は配列との相性が良く、要素の取得等に用いられることが多いです。そして要素だけでなくindexを取得することも可能です。

そこでこのページでは、for-in文を使用してindexを取得する方法を紹介します。

for-in文でindexを取得する

for-in文でindexを取得するコードは以下のようになります。

let countryArray = ["USA", "Japan", "China", "Canada"]

for (index, country) in countryArray.enumerated() {
    print(index, country)
    // 0 USA
    // 1 Japan
    // 2 China
    // 3 Canada
}

国名が入った配列に対してfor-in文でインデックスと国名を取得しています。このようにindexと書けば取得できるので、Swiftのfor-in文でindexを取得するのは簡単です。

その他のfor-inのループ

indexの取得だけだと簡単に終わってしまうので、その他のfor-inループについても紹介していきます。まずは昇順のループです。

for i in 0..<5 {
    print("i: \(i)")
}

上記のコードを実行すると以下のようにコンソール出力されます。

i: 0
i: 1
i: 2
i: 3
i: 4

特徴としては範囲の指定方法です。「..<」という少し変わった記述になります。また降順での場合reverseを指定して、以下のようになります。

for i in (0 ..< 5).reversed() {
    print("i: \(i)")
}

このサンプルコードを実行すると次のようにコンソール出力されます。

i: 4
i: 3
i: 2
i: 1
i: 0

enumeratedで配列の要素取得

enumeratedを使用してインデックスや要素を取得することが可能です。構文は以下になります。

for (index番号, 値) in 配列.enumerated()

サンプルコードは以下です。

let animals = ["dog", "cat", "panda", "elephant"]
for (index, value) in animals.enumerated() {
    print("\(value)")
}

このコードを実行した結果は以下です。

dog
cat
panda
elephant

strideで配列をループさせる

配列をループするにはstrideを使用する方法もあります。構文は以下です。

for i in stride(from: 開始位置, to: 終了位置, by: 間隔)

サンプルコードは以下です。

let animals = ["dog", "cat", "panda", "elephant"]
for i in stride(from: 0, to: animals.count, by: 1) {
    print("\(animals[i])")
}

実行すると以下のようにコンソール出力されます。

dog
cat
panda
elephant

配列のループは以上のようになりますが、dictionary型も配列と同じようにfor-in文でループさせることができます。

for-in文でDictionary型をループさせる

Dictionary型の場合indexというよりはキーと値のセットですが、原理的には配列でindexや値を取得するのと大差ありません。値とセットになるのでindexかキーかという違いだけです。

たとえば、キーと値がセットになっているDictionaryの要素を取得するサンプルコードは以下です。

let foods = ["meat": 800, "vegetable": 500, "soup": 300, "rice": 150, "bread": 150]
for (key,value) in foods {
    print("\(key)は\(value)円です。")
}

上記のコードを実行すると、以下のようにコンソール出力されます。

meatは800円です。
vegetableは500円です。
soupは300円です。
riceは150円です。
breadは150円です。

配列との大きな違いは特になく、for文の引数がkeyとvalueになるだけです。

String型をループさせる

String型をループさせるには、文字列の入った変数名.charactersを使用します。

let str = "dragon"
for char in str.characters {
    print(char)
}

上記のコードを実行すると、以下のようにコンソール出力されます。

d
r
a
g
o
n

for文とwhile文の違い

for文とwhile文では同じことを実装できますが、見た目に違いが現れます。基本的にfor文で実装できるものはfor文で実装した方がシンプルなコードになります。理由は、for文では引数でカウンタ変数の宣言とカウント処理を記述できるからです。具体的には以下のようになります。

//for文
for(var i=1 ; i<4 ; i++){
    print("\(i)回目")
}

//実行結果
//1回目
//2回目
//3回目

//while文
var i = 1
while(i<4){
    print("\(i)回目")
    i++
}

//実行結果
//1回目
//2回目
//3回目

for文は引数でカウンタを作ったりカウント処理を指定するには便利ですが、逆にループ処理のなかでループ継続条件を指定する場合while文の方がコードが見やすくなります。引数で指定できることが多いので基本的にはfor文の方が便利ですが、複雑なループ文などではwhileを使った方が良いこともあります。

//for文
var member = 0 //ループ前で使用している変数とする
for(;member < 3;){
    var a = arc4random_uniform(3) //0から2の乱数を取得
    if(a == 2){
        member++ //乱数が2だった場合、変数をインクリメント
    } else {
        print("現在のtestの値は\(test)")
    }
}

//実行結果(実行の度に結果が異なる)
//現在のtestの値は0
//現在のtestの値は1
//現在のtestの値は1
//現在のtestの値は2

//while文
var member = 0
while(member < 3){
    var a = arc4random_uniform(3) //0から2の乱数を取得
    if(a == 2){
        member++ //乱数が2だった場合、変数をインクリメント
    } else {
        print("現在のtestの値は\(test)")
    }
}

//実行結果(実行の度に結果が異なる)
//現在のtestの値は0
//現在のtestの値は0
//現在のtestの値は1
//現在のtestの値は2

上記の例だとwhile文の方が読みやすいです。以上Swiftのfor-in文でindexを使う方法やその他の情報について解説してきました。for-in文やindexだけが特別というわけではなく、あくまでもループ処理の一環です。

for文はwhile文と使い方が似ており、indexと値をセットで取得する方法もDictionaryの概念と大差ありません。このように似ている概念、使い方は数多いので、なるべく複数のコードを紐づけて頭のなかで体系化できるとプログラミングスキルの上達につながります。

▼Swift関連の記事一覧
1, 【Swiftのフリーランス案件情報付き】仕事やエンジニアの将来性・学習方法!
2, 繰り返し処理に使えるSwiftのfor文とfor-in文の便利な使い方まとめ
3, 条件分岐に便利なSwiftのSwitch文の使い方まとめ
4, アプリ開発でよく使うSwiftの4つの文法を解説します
5, Swiftのoptional型を使いこなすための7つのポイント
6, Swiftで文字列を扱うためのstring型の使い方
7, Swiftでの配列の宣言・初期化・代入・参照の方法まとめ
8, 実際の開発現場でのSwiftの変数・定数の使われ方を解説します
9, Swiftでif let文を使って出来ることとguard letの使い分けに関して
10, 開発現場でよく使うSwiftのif文の条件分岐をまとめました
11, SwiftにおけるTupleの使い方とわかりやすく解説します
12, 初心者にオススメのSwiftのサンプルコードをまとめてみました
13, SwiftのString、Int、Doubleの型の変換方法をまとめました
14, 開発現場で役に立つSwiftのクロージャの使い方
15, Swiftでwhileを使って上手に繰り返し処理を行おう
16, Swiftで文字列の長さをチェックするのにlengthを使ってみよう
17, Swiftのdictionaryの使い方と初期化方法をまとめました
18, Swiftの値渡しと参照渡しに関するまとめ
19, Swiftで参照渡ししたい時のinoutの便利な使い方
20,(この記事)Swiftでfor-in文でindexを使いたい時の方法まとめ
21, Swiftでのクラスとstruct(構造体)の使い分けを解説します

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます