分割と結合
CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 4/56。
区切り文字で区切られたテキストを扱うための、日常的に使われる2つのツールです。どちらも、すでにインポートされている Foundation から提供されています。
components(separatedBy:)は、指定した区切り文字で文字列をStringの配列に分割します:
let csv = "red,green,blue"
let parts = csv.components(separatedBy: ",")
print(parts) // ["red", "green", "blue"]その逆は、任意の [String] に対する joined(separator:) です:
let words = ["swift", "is", "fun"]
let line = words.joined(separator: " ")
print(line) // "swift is fun"これらを組み合わせて使うことがよくあります。分割し、map で変換し、再び結合します。[String] に対する map の結果は依然として [String] なので、joined を直接使用できます。
チャレンジ
簡単1行の入力を読み込みます。これはカンマ区切りの単語リストです。
3行出力してください:
,で分割した後の単語数>(スペース、大なり記号、スペース) で再結合された単語。大文字で出力します。- リストの中で最も長い単語(分割後)。もし2つの単語が同じ長さであれば、最初に現れる方を使用してください。
入力が red,green,blue の場合、出力は以下のようになります:
3
RED > GREEN > BLUE
greenチートシート
文字列を components(separatedBy:) を使って配列に分割します:
let parts = "red,green,blue".components(separatedBy: ",")
// ["red", "green", "blue"]文字列の配列を joined(separator:) を使って再結合します:
let line = ["swift", "is", "fun"].joined(separator: " ")
// "swift is fun"一般的なパターン — 分割、map で変換、再結合:
let result = "red,green,blue"
.components(separatedBy: ",")
.map { $0.uppercased() }
.joined(separator: " > ")
// "RED > GREEN > BLUE"自分で試してみよう
let line = readLine()!
let words = line.components(separatedBy: ",")
// TODO: 単語数、" > "で連結した大文字の文字列、最初の最も長い単語を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。