プログラミング入門15 集まり

 Swiftでは、このような値の「集まり」を作るためのいくつかの機能が用意されています。今回は「集まり」をテーマに、「集まり」の作り方や使い方について学んでいきましょう。

 なお、今回は前回の内容と関連した話が出てきます。途中で分からないところが出てきたときは、前回の記事を参考にしながら読み進めていくと理解しやすいと思います。

配列とは

 配列は、複数の値を一列に並べた集まりです。プログラム上では「Array(アレイ)」と呼びます。

 配列は「棚」のようなものをイメージすると理解しやすいです。棚の引き出しに1段ずつ値を入れていきます。引き出しには番号が振られているので、番号を指定して引き出しを開けて値を取り出します。なお、番号は0から始まります。

●配列を作る

 それでは、配列を作ってみましょう。次のプログラムを書いてみてください。

let クローゼット = ["Tシャツ", "Yシャツ", "トレーナー"]

配列の作成
 このプログラムでは「クローゼット」という定数を宣言し、その定数に配列を代入(※)しています。配列を作るには、「[」と「]」(ブラケット)の中に値を「,」(カンマ)で区切って書きます。つまり、「Tシャツ」と「Yシャツ」と「トレーナー」を1つの集まりにして「クローゼット」に代入しているというわけです。

 配列の中には、同じ型の値だけを入れることができます。上記のプログラムでは「クローゼット」に対してString型の値(文字列)を入れているので、「クローゼット」は「String型の値を入れるための配列」となっています。型の指定は行っていませんが、型推論が働いているため型を指定なくても自動的に決まります。

●配列に入っている値を取り出す

 次に、先ほど作成した「クローゼット」という配列から値を取り出してみましょう。次のプログラムを書いてみましょう。

let トップス = クローゼット[0]
println("今日は\(トップス)を着よう!")

配列に入っている値の取り出し
 配列の中に入っている値を取り出すには、配列の名前の後に続けて、取り出したい値の順番の数値を「[」と「]」で挟んで書きます。よって、0番目の値であれば「[0]」、2番目の値であれば「[2]」といったように書きます。

 上記のプログラムでは、「クローゼット」に入っている0番目の値を取り出し、「トップス」という定数に代入しています。0番目は「Tシャツ」なので、「println()」の結果は「今日はTシャツを着よう!」となります。ぜひ「[0]」の数値を変えてみて、どのような結果になるか試してみてください。

配列に入っている値の取り出しの結果
 配列に入っている値の数を超える順番は指定できない点に注意しましょう。「クローゼット」には3つの値を入れているので、取り出し可能な指定は「[0]」と「[1]」と「[2]」になります。「[3]」や「[5]」などと指定するとエラーが表示されます。

●配列に入っている値を順番に取り出す

 配列に入っている値は、前回学んだ「for文」と組み合わせることで値を順番に取り出すことができます。この機能は、配列に入っている値1つずつに対して何か処理を行いたい場合に使います。

 先ほどの「クローゼット」に入っている値を順番に取り出してみましょう。次のプログラムを書いてみてください。

for トップス in クローゼット {
println("\(トップス)を取り出しました")
}

for文を使った配列に入っている値の取り出し
 for文に配列を使うには、「for」の後に取り出した値に付ける変数名、「in」の後に配列の定数名(または変数名)を書きます。

 このプログラムでは「クローゼット」に入っている値を1つずつ取り出しつつ、「{」と「}」の間に書かれている処理を繰り返し実行します。「トップス」の値については1回目は「Tシャツ」、2回目は「Yシャツ」といったように、配列の順番通りに変わっていきます。

配列を使ったfor文のイメージ
 前回と同様に、for文で繰り返し処理した結果を確認してみましょう。配列に入っている値は3つなので3回繰り返され、毎回「トップス」の値が変わっていることが確認できます。

●配列を使ったfor文の結果
 配列とfor文の組み合わせは、実際のアプリ開発では必要となる場面が多いです。必ず覚えておきましょう。

配列に入っている値を入れ替える

 配列を変数として宣言している場合に限り、配列に入っている値を入れ替えたり、追加したり、削除したりすることができます。

 それぞれ、順番にプログラムを書いてみましょう。まずは配列に入っている値を入れ替えてみましょう。

var 買い物カゴ = ["ジーンズ", "チノパン", "短パン"]
買い物カゴ[2] = "カーゴパンツ"
println("買うのは\(買い物カゴ)")
 配列に入っている値を取り出すときと同じように、配列の変数名の後に続けて、入れ替える対象を「[2]」といったように書きます。その後に続けて新しく入れる値を「=」でつなげます。

 上記のプログラムでは、一行目で「買い物カゴ」に「ジーンズ」と「チノパン」と「短パン」を入れています。次に二行目で(0から数えて)2番目を指定しているので、「短パン」が「カーゴパンツ」に入れ替えられています。そのため、三行目では「買い物カゴ」の中身は「ジーンズ」と「チノパン」と「カーゴパンツ」になります。

配列に入っている値の入れ替えの結果
 なお、配列を定数で宣言している場合は値を入れ替えることができない点に注意してください。配列に入っている値を後から入れ替えたい場合は必ず変数で宣言するようにしましょう。

定数の配列に入っている値の入れ替え
配列に値を追加するappend

 配列に値を追加するには、「append」という機能(※)を使います。

※ このような機能のことを、正確には「メソッド」と呼びます。メソッドの解説はもう少し後の連載で登場する予定ですので、今回は触れずに「機能」としています。

 先ほど作成した「買い物カゴ」に、新しい値を追加してみましょう。次のプログラムを書いてみてください。

買い物カゴ.append("ショートパンツ")
println("買うのは\(買い物カゴ)")

配列への値の追加
 「append」は、「(」と「)」の間に書かれた値を配列に追加する機能です。「append」を使うには、配列の変数名の後に「.」を付け、続けて「append」と書きます。このプログラムでは「ショートパンツ」を追加したため、配列の中身は全部で4つになりました。

配列への値の追加の結果
 値の追加は入れ替えと同様、定数の配列には使えないので注意してください。

配列に入っている値を削除するremoveAtIndex

 配列に入っている値を削除するには、「removeAtIndex」という機能を使います。この機能を使うと、指定した特定の順番に入っている値を削除できます。

 先ほど、「買い物カゴ」の中身を「append」を使って4つに増やしました。今度はその中から1つ減らしてみましょう。次のプログラムを書いてみてください。

買い物カゴ.removeAtIndex(0)
println("買うのは\(買い物カゴ)")

配列に入っている値の削除
 「removeAtIndex」には「0」を指定しているので、0番目の値である「ジーンズ」が削除されます。削除された場所は残らずに詰められるので、削除した後は0番目に「チノパン」、1番目に「短パン」…といったようになります。

配列に入っている値の削除の結果
空の配列を作る

 今までのプログラムでは配列は中身が空の状態で作成することもできます。空の配列を作成するには次のように書きます。

var 箱: [String] = []

空の配列の作成
 このプログラムでは、「String型の値を入れるための配列」として「[String]」を指定しています。このように、配列に型を指定する場合は「[型名]」と書きます。空の配列は「[]」と書きます。つまり、このプログラムでは「中身が空のString型の値を入れるための配列」を作っています。

 こうして作成した空の配列には、「append」を使うことによって後から中身を入れることができます。