文字列の反復処理 P2
CoddyのSwiftジャーニー「基礎」セクションの一部 — レッスン 72/86。
配列でインデックスと要素の両方を取得するために enumerated() を使用したのと同様に、文字列でも同じことができます。これは、反復処理中に各文字の位置を知る必要がある場合に便利です。
let word = "Swift"
for (index, char) in word.enumerated() {
print("\(index): \(char)")
}
// 0: S
// 1: w
// 2: i
// 3: f
// 4: tこのテクニックは、文字の位置に基づいて新しい文字列を作成する際に役立ちます。例えば、偶数インデックスの文字だけを保持したい場合などです:
let text = "abcdef"
var result = ""
for (index, char) in text.enumerated() {
if index % 2 == 0 {
result += String(char)
}
}
print(result) // ace追加する前に、String(char) を使用して char を String に変換していることに注目してください。これは、result が String であり、+= 演算子を使用して Character を直接追加することはできないため、必要になります。
チャレンジ
簡単textを受け取り、奇数インデックスの文字のみを含む新しい文字列を返す関数extractOddIndexCharsを作成してください。
enumerated()を使用して文字列を反復処理し、インデックスが奇数(1、3、5など)である文字を含む結果を構築してください。
パラメータ:
text(String): 処理する入力文字列
戻り値: 奇数インデックスの文字のみを含む文字列 (String)
例: textが"abcdefg"の場合、関数は"bdf"(インデックス1、3、5の文字)を返す必要があります。
チートシート
enumerated() を文字列で使用すると、反復処理中にインデックスと文字の両方を取得できます。
let word = "Swift"
for (index, char) in word.enumerated() {
print("\(index): \(char)")
}
// 0: S
// 1: w
// 2: i
// 3: f
// 4: t文字の位置に基づいて文字列を構築する場合、追加する前に Character を String に変換します。
let text = "abcdef"
var result = ""
for (index, char) in text.enumerated() {
if index % 2 == 0 {
result += String(char)
}
}
print(result) // ace+= で追加するときに Character を String に変換するには、String(char) を使用します。
自分で試してみよう
func extractOddIndexChars(text: String) -> String {
// ここにコードを記述してください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。