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

19/03/10 14:02:55     19/04/08 09:34:55

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の概念と大差ありません。このように似ている概念、使い方は数多いので、なるべく複数のコードを紐づけて頭のなかで体系化できるとプログラミングスキルの上達につながります。

案件量が豊富なアルマサーチ

アルマサーチ

最後に、アルマサーチのご紹介!

アルマサーチはフリーランス向けに案件をご紹介することに特化したエージェントサービスです。豊富な案件量から、安定して継続的な案件のご紹介を実現しており、口コミから登録エンジニアが急増中です。

アルマサーチが選ばれる理由

  1. 豊富な案件量。週3〜4日の案件や在宅リモート案件も。
  2. 優秀なコンサルタント陣。
  3. 案件に参画後もしっかりサポート。

豊富な案件量

フリーランス向けに特化し、業界屈指の案件量を誇ります!週3〜4日の案件や、在宅リモート案件もありますし、その他あらゆる希望をしっかりお伝えください。最適な案件のご紹介をさせていただきます。

優秀なコンサルタント陣

技術に疎く、開発の希望を伝えても響かないエージェント・・・嫌ですよね。アルマサーチにはそのような者は一切おりません!さらに独立にまつわる税金や保険関係に詳しいスタッフが徹底的にサポートさせていただきます。

案件に参画後もしっかりサポート

常駐先が決まった瞬間に、一度も連絡が取れなくなるエージェント・・・いますよね?アルマサーチでは、そのようなことは一切ありません!常に電話やメールは即対応しますし、月に1度のランチミーティングなどから現場の状況を細かくヒアリングし、就業環境改善に尽力いたします。

相談する

▼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(構造体)の使い分けを解説します

人気記事

編集部おすすめ記事

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

案件探しやフリーランスになるための相談する

最新お役立ちコンテンツ一覧