English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift for-ループ内で

この記事では、for-inループの使用例とバリエーション。

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!")
}

文法について心配しないでください。以下で詳しく説明します。

For-inループの文法

Swiftでfor inループを作成できます。以下のように:

for <value> in <range> {
	<some work here>
}

上記のループは範囲を巡回し、<value>変数で範囲から返される各要素にアクセスできます。範囲について知らない場合は、以下の記事を参照してください:Swiftの範囲

それはどのように動作するのでしょうか?

  • 反復されるシーケンスは<range>です。

  • <value>を範囲の最初の数字に設定し、ループ内の文< ここでの一部の作業 >

  • 文が実行された後、<value>が<range>に含まれる次の値を含むように更新され、文<ここでの一部の作業>が再び実行されます。

  • このプロセスは範囲の終点に達し、ループを停止するまで続行します。

例1:for-Swiftでのinループの動作方法

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)返される値

出力
11Hello world! 値是 1
22Hello world! 値是 2
33Hello world! 値是 3

for-ループ内で範囲値を捨て去ります

ループ内で範囲値を使用していない場合、Swiftでは(アンダースコア_)を使用して捨て去ることができます。以下のように:

for _ in <range> {
	<some work here>
}

例2:for-ループ内で範囲値を捨て去ります

//この例では、半開範囲演算子を使用して値を無視し、
for _ in 1..<3 {
	print("Hello world!")
}

このプログラムを実行すると、出力は以下のようになります:

Hello world!
Hello world!

上記のプログラムでは、半開範囲演算子(.. <)を使用して、遍历するシーケンスの範囲は1まで2、それには下限(1)を含まない3)を無視します。

アンダースコア_は範囲(1)の値を取得し、print文を実行します。再度print文を呼び出して次の迭代を行い、プロセスが終了します。なぜなら、2はその範囲の最後の値です。

範囲値なしのfor-ループ内の実行ステップ
イテレーション範囲から返された値出力
1捨て去るHello world!
2捨て去るHello world!

固定間隔のforループ-ループ内

ループの各迭代で固定の値(範囲ではなく)で増加させる場合は、strideメソッドを使用する必要があります。

例3:strideのforループを使用して-ループ内

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文を呼び出します。このプロセスは、シーケンス内のすべての要素にアクセスするまで続きます。

strideを使用してループ内の実行ステップを実行します
条件(Value < End)i (出力)
11 < 10 (true)1
1 + 2 = 33 < 10 (true)3
1 + 2 * 2 = 55 < 10 (true)5
1 + 3 * 2 = 77 < 10 (true)7
1 + 4 * 2 = 99 < 10 (true)9
1 + 5 * 2 = 1111 < 10 (false)Stops

forを利用して-集合の要素にinループを使用してアクセスしますか?

以下のように、文字列の配列があると仮定します。配列についてよくわからない場合は、配列を複数の値を格納できる単一のコンテナとして考えてください。詳細については、参照してください。Swiftの配列

let programmingLanguages = ["Swift", "Java", "Go","JavaScript","Kotlin","Python"]

誰かがすべてのプログラミング言語を印刷するように言ったらどうしますか?

一つの方法は、インデックス値programmingLanguages[0]、programmingLanguages[を使用することです。1]... でこれらの要素にアクセスし、逐次すべての要素を取得するまで続きます。しかし、これが非常に面倒です。

したがって、ループは役立ちます。for inループを使用して反復できます:

例4: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文が再び呼び出されます。このプロセスは配列の最後の要素まで続きます。

例5:forを利用して-集合の要素にアクセスするinループ

Swiftでは文字列それも集合であり、したがって、forループを使用して文字列の各文字にアクセスできます。

for value in "I♥Swift!" {
	print(value)
}

このプログラムを実行すると、出力は以下のようになります:

I
♥
S
w
i
f
t
!

forを利用して-集合のインデックスにアクセスするinループ?

配列のインデックス(配列内の要素の位置、つまり0、1、2),则需要使用 enumerated メソッド:

例6:forを利用して-配列のインデックスにアクセスするinループ

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)が何かご存知でない場合は、異なるタイプの値を収容できるコンテナとして簡単に考えれば良いでしょう。

for inループで、-for inループで、元組内のこれらの項を個別にアクセスできます。元組(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は次の文字に更新されます。

このプロセスは、文字列の最後の文字までアクセスするまで続きます。

forを使用して-ループの実行ステップでフィルタリングを行います
イテレーションvaluevalue != “!”出力
1ItrueI
2true
3StrueS
4wtruew
5itruei
6ftruef
7ttruet
8!false