【Swift】forでコレクションのindexを取得する方法!
(*このページは2021年2月23日に更新されました。)
Swiftのforでコレクションの要素を取り出しているときに「要素とインデックスを取得したい」と思ったことはありませんか?
「rangeで取り出せばと思うけど、rangeとコレクションは一緒に定義できないし…。」
など、プログラミングでは思っていたことができないようなケースが多々あります。
Swiftのforでインデックスを取得する場合はenumerated()を使用します。
enumerated()は処理回数のインデックカウンターを返す関数であり、処理と同時に0からのカウンタを取得することができます。
したがって、forにenumerated()を組み合わせるとコレクションの要素とインデックスを同時に取得することができるのです。
また、enumerated()は一次元のコレクションだけでなく、二次元や三次元のような多次元コレクションの要素とインデックスを同時に取得することができます。
今回はSwiftのforでコレクションのindexを取得する方法について以下の内容を解説していきます。
⚫︎ forとは
⚫︎ enumerated()とは
⚫︎ インデックスのみを取得する場合
⚫︎ インデックスと要素を同時に取得する場合
⚫︎ 二次元のコレクションの場合
⚫︎ 三次元のコレクションの場合
目次
forとは
forとは繰り返し処理のことであり、決まった回数分の処理を行う構文となります。
まだ、forについて詳しく知らない場合や、使い方について詳しく知りたい場合についてはこちらをご参考ください。
enumerated()とは
enumerated()とは処理回数のインデックカウンターを返す関数となります。
そのため、forで使用すると、コレクションから取り出した要素と同時に、0からのインデックスが付与されるようになります。
enumerated()の書き方
enumerated()の構文は下記のようになります。
1 2 3 |
for (インデックス変数 [, 要素変数]) in コレクション.enumerated() { 処理内容 } |
forとinの間にインデックス変数を指定し、コレクションの後ろにenumerated()を使用することで、インデックスを取得することができます。
また、forとinの間にインデックス変数と要素変数を指定し、コレクションの後ろにenumerated()を使用することで、要素とインデックスを同時に取得することができます。
forでコレクションのindexを取得するサンプルコード
forでindexを取得するサンプルコードを紹介します。
インデックスのみを取得する場合
forとenumerate()でインデックスのみを取得する場合はインデックス変数のみ使用します。
例
1 2 3 4 5 6 |
print("enumerated()でインデックスのみ取り出す") let list1: [String] = ["渋谷", "新宿", "世田谷", "千代田", "足立"] for (index, value) in list1.enumerated() { print(index) } |
出力結果
enumerated()でインデックスのみ取り出す
0
1
2
3
4
インデックス変数のみを使用することで、インデックスを取得しています。
インデックスと要素を同時に取得する場合
forとenumerate()でインデックスと要素を同時に取得する場合はインデックス変数と要素変数を使用します
例
1 2 3 4 5 6 |
print("enumerated()でインデックスと要素を同時に取り出す") let list1: [String] = ["渋谷", "新宿", "世田谷", "千代田", "足立"] for (index, value) in list1.enumerated() { print("\(index): \(value)") } |
出力結果
enumerated()でインデックスと要素を同時に取り出す
0: 渋谷
1: 新宿
2: 世田谷
3: 千代田
4: 足立
インデックス変数と要素変数を使用することで、インデックスと要素を同時に取得しています。
forで多次元のコレクションのindexを取得するサンプルコード
forで多次元のコレクションのindexを取得するサンプルコードを紹介します。
二次元のコレクションの場合
forとenumerated()で二次元のコレクションのindexを取得してみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
print("enumerated()でインデックスと要素を同時に取り出す") let list1: [[String]] = [["渋谷", "新宿", "世田谷", "千代田"], ["港", "大東", "品川", "多摩"], ["足立", "中央", "江東", "目黒"]] print("・二次元コレクションのインデックスと要素を同時に取り出す") for (index, value) in list1.enumerated() { print("\(index): \(value)") } print("・一次元コレクションのインデックスと要素を同時に取り出す") for i in list1 { for (index, value) in i.enumerated() { print("\(index): \(value)") } } |
出力結果
enumerated()でインデックスと要素を同時に取り出す
・二次元コレクションのインデックスと要素を同時に取り出す
0: [“渋谷”, “新宿”, “世田谷”, “千代田”]
1: [“港”, “大東”, “品川”, “多摩”]
2: [“足立”, “中央”, “江東”, “目黒”]
・一次元コレクションのインデックスと要素を同時に取り出す
0: 渋谷
1: 新宿
2: 世田谷
3: 千代田
0: 港
1: 大東
2: 品川
3: 多摩
0: 足立
1: 中央
2: 江東
3: 目黒
forによって二次元コレクションのインデックスと要素を同時に取り出しています。
また、多重のforによって二次元コレクションの中にある一次元コレクションのインデックスと要素を同時に取り出しています。
三次元のコレクションの場合
forとenumerated()で三次元のコレクションのindexを取得してみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
print("enumerated()でインデックスと要素を同時に取り出す") let list1: [[[String]]] = [[["渋谷", "新宿", "世田谷", "千代田"], ["港", "大東", "品川", "多摩"], ["足立", "中央", "江東", "目黒"]],[["中", "中川", "天白"], ["港", "熱田", "南"], ["緑", "北", "東"]]] print("・三次元コレクションのインデックスと要素を同時に取り出す") for (index, value) in list1.enumerated() { print("\(index): \(value)") } print("・二次元コレクションのインデックスと要素を同時に取り出す") for i in list1 { for (index, value) in i.enumerated() { print("\(index): \(value)") } } print("・三次元コレクションのインデックスと要素を同時に取り出す") for i in list1 { for j in i { for (index, value) in j.enumerated() { print("\(index): \(value)") } } } |
出力結果
enumerated()でインデックスと要素を同時に取り出す
・三次元コレクションのインデックスと要素を同時に取り出す
0: [[“渋谷”, “新宿”, “世田谷”, “千代田”], [“港”, “大東”, “品川”, “多摩”], [“足立”, “中央”, “江東”, “目黒”]]
1: [[“中”, “中川”, “天白”], [“港”, “熱田”, “南”], [“緑”, “北”, “東”]]
・二次元コレクションのインデックスと要素を同時に取り出す
0: [“渋谷”, “新宿”, “世田谷”, “千代田”]
1: [“港”, “大東”, “品川”, “多摩”]
2: [“足立”, “中央”, “江東”, “目黒”]
0: [“中”, “中川”, “天白”]
1: [“港”, “熱田”, “南”]
2: [“緑”, “北”, “東”]
・三次元コレクションのインデックスと要素を同時に取り出す
0: 渋谷
1: 新宿
2: 世田谷
3: 千代田
0: 港
1: 大東
2: 品川
3: 多摩
0: 足立
1: 中央
2: 江東
3: 目黒
0: 中
1: 中川
2: 天白
0: 港
1: 熱田
2: 南
0: 緑
1: 北
2: 東
forによって三次元コレクションのインデックスと要素を同時に取り出しています。
また、多重のforによって三次元コレクションの中にある二次元コレクションと一次元コレクションのインデックスと要素を同時に取り出しています。
まとめ
forとenumerated()でコレクションのindexを取得
⚫︎ enumerated()とは処理回数のインデックカウンターを返す関数である
⚫︎ forとenumerate()でインデックスのみを取得する場合はインデックス変数のみ使用する
⚫︎ forとenumerate()でインデックスと要素を同時に取得する場合はインデックス変数と要素変数を使用する
⚫︎ enumerate()は一次元のコレクションだけでなく、二次元や三次元のような多次元コレクションの要素とインデックスを同時に取得することができる
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。