English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、for-inループの使用例とバリエーション。
for-inループを使用して、一定の時間内にタスクセットを実行します。これらのループは、配列の要素、範囲、または文字列の文字などの任何のシーケンスを巡回します。
私たちはfor-inループは固定の時間内に繰り返し処理を実行します。
想像してみてください、誰かにスクリーンにHello,Worldを表示するプログラムを書くように指示されたら!あなたの解決策は:
print("Hello, World!")
彼らが変更し、スクリーンにHello,Worldを表示する5回のプログラムを書くように指示されたらどうしますか?。ループの知識がない場合、あなたの解決策は:
print("Hello, World!") print("Hello, World!") print("Hello, World!") print("Hello, World!") print("Hello, World!")
もっとも、5回の同じコードを書いて同じ作業を完了するのは時間がかかります。その場合、誰かに数百回、または数百万回のHello,World!をスクリーンに表示するプログラムを書くよう依頼されたらどうしますか?
幼い解決策の一つは、指定された回数のprint文を書くことです。狂っていますか?しかし、forを使うことで、-inループの数行のコードを見ると、より良い解決策を見つけることができます:
for i in 1...100 { //Hello Worldをスクリーンに表示 100回 print("Hello, World!") }
文法について心配しないでください。以下で詳しく説明します。
Swiftでfor inループを作成できます。以下のように:
for <value> in <range> { <some work here> }
上記のループは範囲を巡回し、<value>変数で範囲から返される各要素にアクセスできます。範囲について知らない場合は、以下の記事を参照してください:Swiftの範囲。
反復されるシーケンスは<range>です。
<value>を範囲の最初の数字に設定し、ループ内の文< ここでの一部の作業 >
文が実行された後、<value>が<range>に含まれる次の値を含むように更新され、文<ここでの一部の作業>が再び実行されます。
このプロセスは範囲の終点に達し、ループを停止するまで続行します。
for i in 1...3 { print("Hello world! Value is \(i)") }
このプログラムを実行すると、出力は以下のようになります:
Hello world! Value is 1 Hello world! Value is 2 Hello world! Value is 3
上記のプログラムでは、反復するシーケンスの範囲は1まで3。
iの値が範囲(1の最初の数字で、各イテレーションで範囲の次の数字に更新され、範囲(3の終了。
イテレーション | 从範囲(i)返される値 | 出力 |
---|---|---|
1 | 1 | Hello world! 値是 1 |
2 | 2 | Hello world! 値是 2 |
3 | 3 | Hello world! 値是 3 |
ループ内で範囲値を使用していない場合、Swiftでは(アンダースコア_)を使用して捨て去ることができます。以下のように:
for _ in <range> { <some work here> }
//この例では、半開範囲演算子を使用して値を無視し、 for _ in 1..<3 { print("Hello world!") }
このプログラムを実行すると、出力は以下のようになります:
Hello world! Hello world!
上記のプログラムでは、半開範囲演算子(.. <)を使用して、遍历するシーケンスの範囲は1まで2、それには下限(1)を含まない3)を無視します。
アンダースコア_は範囲(1)の値を取得し、print文を実行します。再度print文を呼び出して次の迭代を行い、プロセスが終了します。なぜなら、2はその範囲の最後の値です。
イテレーション | 範囲から返された値 | 出力 |
---|---|---|
1 | 捨て去る | Hello world! |
2 | 捨て去る | Hello world! |
ループの各迭代で固定の値(範囲ではなく)で増加させる場合は、strideメソッドを使用する必要があります。
let interval = 2 for i in stride(from: 1, to: 10, by: interval) { print(i) }
このプログラムを実行すると、出力は以下のようになります:
1 3 5 7 9
上記のプログラムでは、stride関数が以下の数字シーケンスを返します:1、3、5、7、9。
iの値をシーケンス(1)の最初の数字にiの値を設定し、ループ内のprint文を実行します。この文は、コンソールに「 1”。
この文を実行後、iの値を別の値に更新します(3)、そして再度print文を呼び出します。このプロセスは、シーケンス内のすべての要素にアクセスするまで続きます。
値 | 条件(Value < End) | i (出力) |
---|---|---|
1 | 1 < 10 (true) | 1 |
1 + 2 = 3 | 3 < 10 (true) | 3 |
1 + 2 * 2 = 5 | 5 < 10 (true) | 5 |
1 + 3 * 2 = 7 | 7 < 10 (true) | 7 |
1 + 4 * 2 = 9 | 9 < 10 (true) | 9 |
1 + 5 * 2 = 11 | 11 < 10 (false) | Stops |
以下のように、文字列の配列があると仮定します。配列についてよくわからない場合は、配列を複数の値を格納できる単一のコンテナとして考えてください。詳細については、参照してください。Swiftの配列。
let programmingLanguages = ["Swift", "Java", "Go","JavaScript","Kotlin","Python"]
誰かがすべてのプログラミング言語を印刷するように言ったらどうしますか?
一つの方法は、インデックス値programmingLanguages[0]、programmingLanguages[を使用することです。1]... でこれらの要素にアクセスし、逐次すべての要素を取得するまで続きます。しかし、これが非常に面倒です。
したがって、ループは役立ちます。for inループを使用して反復できます:
let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"] for language in programmingLanguages { print(language) }
このプログラムを実行すると、出力は以下のようになります:
Swift Java Go JavaScript Kotlin Python
上記のプログラムでは、反復するシーケンスは文字列配列です。
languageの値は配列の最初の要素に設定され、ループ内のprint文が実行され、コントロールターミナルに「Swift」と出力されます。
文の実行後、languageは配列の次の要素で更新され、print文が再び呼び出されます。このプロセスは配列の最後の要素まで続きます。
Swiftでは文字列それも集合であり、したがって、forループを使用して文字列の各文字にアクセスできます。
for value in "I♥Swift!" { print(value) }
このプログラムを実行すると、出力は以下のようになります:
I ♥ S w i f t !
配列のインデックス(配列内の要素の位置、つまり0、1、2),则需要使用 enumerated メソッド:
let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"] for (index, language) in programmingLanguages.enumerated() { print("\(index):\(language)") }
このプログラムを実行すると、出力は以下のようになります:
0:Swift 1:Java 2:Go 3:JavaScript 4:Kotlin 5:Python
ここでは、enumメソッドは配列の各プロジェクトに対して、インデックス(Int)と値(String)で構成されたタプル(Int, String)を返します。例えば:(0,Swift),(1,Java)
forを利用して-それぞれの項にアクセスできます。元組(Tuple)が何かご存知でない場合は、異なるタイプの値を収容できるコンテナとして簡単に考えれば良いでしょう。
さらに、inループでwhere子句を使用して要素をフィルタリングすることができますか?whereforループ内の内容をフィルタリングするための子句があります
for value in "I♥Swift!" where value != "!" { print(value) //感叹号を削除する }
このプログラムを実行すると、出力は以下のようになります:
I ♥ S w i f t
上記のプログラムでは、イテレートするシーケンスは文字列(文字集合)です。
valueは文字列の最初の文字に設定され、where条件を使用してチェックされます。条件がtrueを返した場合、ループ内のブロック(プリント文)が実行され、コントロールターミナルに「I」が出力されます。
文の実行後、valueは文字列の次の文字に更新され、再度条件を確認します。条件がfalseを返した場合、そのブロックは実行されず、valueは次の文字に更新されます。
このプロセスは、文字列の最後の文字までアクセスするまで続きます。
イテレーション | value | value != “!” | 出力 |
---|---|---|---|
1 | I | true | I |
2 | ♥ | true | ♥ |
3 | S | true | S |
4 | w | true | w |
5 | i | true | i |
6 | f | true | f |
7 | t | true | t |
8 | ! | false |