Swiftで値の集まりを使いこなそう――配列(Array)、辞書(Dictionary)の作り方、使い方:初心者のためのSwiftで始めるプログラミング入門(5)(1/2 ページ)
本連載では、これからプログラミングやiPhoneアプリ開発を始めてみたい方を対象に、開発に必要な知識を基礎から解説していきます。今回は、配列と辞書の作り方や、それぞれの値の参照、更新、追加、削除など、使い方について。
さまざまな値を「集まり」にしてみよう
前回の「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型の値を入れるための配列」となっています。型の指定は行っていませんが、型推論が働いているため型を指定なくても自動的に決まります。
配列に入っている値を取り出す
次に、先ほど作成した「クローゼット」という配列から値を取り出してみましょう。次のプログラムを書いてみましょう。
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」の後に取り出した値に付ける変数名、「in」の後に配列の定数名(または変数名)を書きます。
このプログラムでは「クローゼット」に入っている値を1つずつ取り出しつつ、「{」と「}」の間に書かれている処理を繰り返し実行します。「トップス」の値については1回目は「Tシャツ」、2回目は「Yシャツ」といったように、配列の順番通りに変わっていきます。
前回と同様に、for文で繰り返し処理した結果を確認してみましょう。配列に入っている値は3つなので3回繰り返され、毎回「トップス」の値が変わっていることが確認できます。
配列と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つのセットの和集合となるセットを作り出す機能などもあります。
セットは、配列や辞書と比べて必要となる機会は少ないですが、覚えておくととても便利な機能です。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- アップル、新プログラミング言語「Swift」「iOS 8 SDK」「Xcode 6」のベータ版を発表
米アップルが新しいプログラミング言語「Swift」と開発ツール「iOS 8 SDK」「Xcode 6」のベータ版を発表。その特徴と注目ポイントを紹介。 - iOS 8 SDK、Xcode 6、Swift 1.0がGMに。Apple Pay機能の組み込み、TestFlight Beta Testingも利用可能
米アップルが2014年9月9日に発表した内容の中から、iOS 8 SDK、Xcode 6、Apple Watch、Swift 1.0などに関する開発者向けの情報をまとめてみる。 - Swiftでの変数の定義、Xcodeでのアウトレット接続、iOSシミュレーターへの画像素材追加
iPhone 6/6 PlusアプリをSwift言語で作成してみたいという初心者向けにiOS 8の新機能を使ったアプリの作り方を一から解説する入門連載。今回は、Xcodeでアウトレットを接続する方法、Swiftでの変数定義の仕方、iOSシミュレーターへ画像素材を追加する方法などを解説します。 - OptionalなどSwiftとObjective-Cの違いを意識してPhotos Frameworkを使う
iPhone 6/6 PlusアプリをSwift言語で作成してみたいという初心者向けにiOS 8の新機能を使ったアプリの作り方を一から解説する入門連載。今回は、前回の記事で追加した写真の情報を「Photos Framework」の機能を使用して取り出し、写真の情報にひも付いた座標にピンを表示します。また、その過程でOptionalなどSwiftとObjective-Cの違いについて解説します。 - Swiftのカスタムクラスの作り方――プロトコル、サブクラス、イニシャライザー、タイププロパティメソッドのオーバーライド、デリゲートについて注釈の作成で学ぶ
iPhone 6/6 PlusアプリをSwift言語で作成してみたいという初心者向けにiOS 8の新機能を使ったアプリの作り方を一から解説する入門連載。今回は、前回の記事で追加した地図上の「注釈」を写真のサムネイルに差し替える課程でSwiftのカスタムクラスの作成手順について解説します。 - iOS 8アプリ開発のこれまで&Swift 1.2への対応、プロパティオブザーバーとwillSetの基本的な使い方、セグエを使った画面遷移
iPhone 6/6 PlusアプリをSwift言語で作成してみたいという初心者向けにiOS 8の新機能を使ったアプリの作り方を一から解説する入門連載。最終回は、これまでの連載を振り返り、これまで作成したPhotoKitを使ったサンプルアプリの仕上げとしてセグエを使った画面遷移を実装の仕方や、プロパティオブザーバーとwillSetの基本的な使い方を解説する。 - 外から見るWWDC 2014キーノート――Swiftに感じるAppleの本気
WWDC常連のドリキンが今年もキーノートを斬ります! 今回はメディアとエンジニアとで、反応が真っ二つに分かれる内容となりました。その理由をエンジニア視点で解き明かしていきたいと思います。 - Excelでプログラム作成を始めるメリットとマクロの基本
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。初回は、そもそもプログラミングとは何か、Visual BasicとVBAとマクロの違い、マクロの作り方、保存/削除、セキュリティ設定などについて【Windows 10、Excel 2016に対応】。