Menu
Coddy logo textTech

分割と結合

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 を直接使用できます。

challenge icon

チャレンジ

簡単

1行の入力を読み込みます。これはカンマ区切りの単語リストです。

3行出力してください:

  1. , で分割した後の単語数
  2. > (スペース、大なり記号、スペース) で再結合された単語。大文字で出力します。
  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: 単語数、" > "で連結した大文字の文字列、最初の最も長い単語を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン