Swiftで値の集まりを使いこなそう――配列(Array)、辞書(Dictionary)の作り方、使い方初心者のためのSwiftで始めるプログラミング入門(5)(1/2 ページ)

本連載では、これからプログラミングやiPhoneアプリ開発を始めてみたい方を対象に、開発に必要な知識を基礎から解説していきます。今回は、配列と辞書の作り方や、それぞれの値の参照、更新、追加、削除など、使い方について。

» 2015年07月23日 05時00分 公開
[諏訪悠紀アンダースコア]

さまざまな値を「集まり」にしてみよう

「初心者のためのSwiftで始めるプログラミング入門」のインデックス

連載目次

 前回の「Swift 2.0とオープンソース化が発表されたSwiftの制御構文――比較演算子、条件分岐(if、else、switch)、繰り返し(for、while)&Playgroundのグラフで確認」では、さまざまな条件に応じてプログラムの流れを変化させる「制御構文」について解説しました。

 これまでの学習では、主に変数や定数などの値を使ってプログラミングをしてきました。Swiftでは、これらの変数や定数といった値を「集まり」にすることができます。値を「集まり」にすることで、膨大な数の値をまとめて管理できます。

「値の集まり」のイメージ

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

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

配列とは

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

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

配列のイメージ

配列を作る

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

let クローゼット = ["Tシャツ", "Yシャツ", "トレーナー"]
配列の作成

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

配列を作成するプログラムのイメージ

※ 定数や変数、そして代入などについては連載第3回「Apple WatchやiPhoneのアプリを作ろう! Playgroundで学ぶSwiftの基礎―変数、定数、型、演算」で解説していますので、意味がよく分からない場合は、こちらを参照してください。

 配列の中には、同じ型の値だけを入れることができます。上記のプログラムでは「クローゼット」に対してString型の値(文字列)を入れているので、「クローゼット」は「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」を使うことによって後から中身を入れることができます。

【コラム】配列に似た「セット」という集まり

 セットは、複数の異なる値を一列に並べた集まりです。プログラム上ではそのまま「Set(セット)」と呼びます。配列と似ていますが、同じ値を複数個入れることができない点と順番が決まっていない点で異なります。

 セットは次のように作成します。型名に「Set」と指定することで、セットを作成することができます。

let 販売員: Set = ["太郎", "次郎", "花子"]

 セットは、主に包含関係を調べたり、新しい集まりを作ったりするために使います。例えば、次のプログラムでは「男性」の中身が「販売員」の中身に含まれているか「isSubsetOf」という機能を使って調べています。

let 販売員: Set = ["太郎", "次郎", "花子"]
let 男性: Set = ["太郎", "次郎"]
let 含まれているか = 男性.isSubsetOf(販売員)
println("含まれている? : \(含まれているか)")

 この他に、2つのセットの和集合となるセットを作り出す機能などもあります。

 セットは、配列や辞書と比べて必要となる機会は少ないですが、覚えておくととても便利な機能です。


       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。