Swift

【Swift入門 文法編】配列(Array型)をマスターしよう

この記事ではSwiftの基本ある、配列についての基本事項を解説していきます。

プログラミングが初心者も、他の言語をやっていてSwiftは初心者という人にもわかるように説明していきたいと思います。

Array<Element>型とは

Array<Element>型は配列を表します。
配列というのは、データの集まりをまとめて格納するデータ構造であるコレクションの1つで、他のコレクションと異なる点は、順序を持つことです。

Swiftで主要なコレクションは配列 (Array)、集合 (Set)、辞書 (Dictionary) の3つがあります。

Array<Element>Elementの部分は、実際に使うときには具体的な型で置き換えて、Array<Int>型Array<String>型のようにして使います。

例えばArray<Int>型であれば、Int型の要素が集まった配列ということになります。

配列の要素にはどんな型でも取れるので、Elementで仮置きのようにしています。

配列の宣言方法

Array<Element>型は、以下のようにカンマ区切りで要素を列挙して[]で囲みます。


let a: Array<Int> = [1, 2, 3]
let b: Array<String> = ["a", "b", "c"]

上記の例では、Array<Int>Array<String>と記述しましたが、[Int][String]と書くこともできます。
実際に使うときは[Int][String]というように書くほうが一般的です。

このように、すでに定義されている構文をより簡単に読み書きできるように導入されている構文をシンタックスシュガーといいます。


let a: [Int] = [1, 2, 3]
let b: [String] = ["a", "b", "c"]

2種類の表現が同じ意味を表す表現というのをわかっていないと、見たときに混乱してしまうのでしっかり押さえておきましょう。

型推論

配列の要素が推論可能な場合、型アノテーションを省略することができます。


let a = [1, 2, 3] //[Int]型
let b = ["a", "b", "c"] //[String]型

要素が空の配列は[]と表します。
要素がからの場合には型アノテーションを付けて、型を明示する必要があります。


let a = [] //コンパイルエラー
let b: [Int] = []

[Any]型

配列の要素の型は、全て同じでないといけないというルールがあります。


let a: [Int] = [1, "a"] //コンパイルエラー

もしそのような配列を扱いたい場合はAny型を使用します。
他のどんな型でもAny型として扱うことができます。

なので先程の例も、[Any]型とすればコンパイルエラーにはなりません。


let a: [Any] = [1, "a"]

どんな型でもAny型と扱うことができるのでオールマイティな便利な型と想うかもしれませんが、実際にはなるべく使わないようにしたほうがいいです。

例えば、Int型であれば四則演算をすることができますが、値が整数だったとしてもAny型と扱ってしまえば、四則演算ができなくなってしまいます。


let a: Any = 1
let b: Any = 2
a + b //コンパイルエラー

このようにAny型とすることで型情報が失われて操作の幅が狭くなってしまうので、なるべくAny型は使わないようにするのが好ましいです。

要素にできる型

前半部分でも説明しましたが、Array<Element>型Elementの部分にはどんな型も当てはめることができます。

例えばElementの部分に[Int]型を当てはめることで[[Int]]型を表すことができます。
これはInt型の配列の配列を表します。


let a: [[Int]] = [[1, 2, 3], [4, 5, 6]]

このような配列を2次元配列といいます。

同様に、[[[Int]]]型のようにすることもできます。

配列の操作

ここからはArray<Element>型の基本的な操作をまとめていきます。

要素へのアクセス方法

Array<Element>型にアクセスするには[]とインデックスを表すInt型の数値を使って以下のように表します。
最初の要素のインデックスは0から始まることに注意してください。
インデックスは範囲を超えてしまうと実行時エラーになります。


let a: [String] = ["a", "b", "c"]
a[0] //"a"
a[1] //"b"
a[2] //"c"
a[3] //実行時エラー

[インデックス]の部分をサブスクリプトといいます。

特に、最初の要素と最後の要素にアクセスする場合には、firstlastを使うことでアクセスすることができます。


let a = ["a", "b", "c"]
print(a.first) //Optional("a")
print(a.last) //Optional("c")

let b: [Int] = []
print(b.first) //nil
print(b.last) //nil

もし対象の配列の要素がからの場合にはnilとなるので、firstlastを使う場合にはオプショナル型となるので注意が必要です。

オプショナル型に関してはこちらの記事で説明しています。

【Swift入門】オプショナル型を理解しようswiftの大きな特徴といえばOptional型ですね。 ですが初心者にとっては、Optional型というと、 Optionalって...

要素の更新

配列の要素の更新を行いたい場合は、以下のように更新したい要素を指定して、=で代入する形で書きます。
こちらは変数でないと実行できません。


var a: [String] = ["a", "b", "c"]
a = "bb"
print(a) //["a", "bb", "c"]

let b: [String] = ["a", "b", "c"]
b = "bb" //コンパイルエラー

配列の要素を追加

配列に要素を追加する場合はappendを使う方法と、++=を使う方法があります。
こちらも、元の配列を書き換える形になるものは変数でないと使えません。


var a: [String] = ["a", "b", "c"]
a.append("d")
print(a) //["a", "b", "c", "d"]

let b = a + ["e"]
print(b) //["a", "b", "c", "d", "e"]

var c = ["a", "b"]
c += ["c"]
print(c) //["a", "b", "c"]

先程の、append,+,+=は末尾に追加するのに対して、指定した場所に追加するのはinsertを使います。


var a = ["a", "b", "c"]
a.insert("d", at: 1)
print(a) //["a", "d", "b", "c"]

要素の削除

要素の削除には、

  • remove … 指定の要素のインデックスを指定して削除する
  • removeFirst … 最初の要素を削除する
  • removeLast … 最後の要素を削除する
  • removeAll … すべての要素を削除する

などが主にあります。


var a = ["a", "b", "c", "d", "e"]

a.remove(at: 1)
print(a) //["a", "c", "d", "e"]

a.removeFirst()
print(a) //["c", "d", "e"]

a.removeLast()
print(a) //["c", "d"]

a.removeAll()
print(a) //[]

配列の要素数を調べる

配列の要素数を調べる場合はcountを使います。


let a = ["a", "b", "c"]
a.count //3

配列の要素が空かどうかを調べる

配列が空かどうかはisEmptyを使います。


let a = ["a", "b", "c"]
a.isEmpty //false

let b: [Int] = []
b.isEmpty //true

配列のそれぞれの要素に対して処理を行う

配列のそれぞれの要素に対して処理を行う場合はfor文を使うことで可能です。


let strings = ["a", "b", "c"]
for string in strings {
    print(string)
}

//実行結果
a
b
c

この記事では詳しく扱いませんが、mapforEachを使った配列の処理も使いこなせるようになると便利です。


let numbers = [1, 2, 3]

numbers.forEach { print($0) }
let doubleNumbers = numbers.map { $0 * 2 }
print(doubleNumbers)

//実行結果
0
1
2
[2, 4, 6]

まとめ

今回は、Array<Element>に関してまとめていきました。
Array<Element>Swiftの基本事項なのでしっかり押さえておきましょう。

Swiftの入門記事に関してはこちらにまとめていますので参考にしてみてください。

〜初心者でもわかるswift入門〜基本文法からiOSアプリを開発するまでこのシリーズではプログラミング初心者の人や、swiftを初めて触れる人、やってみたもののよくわからないという人向けに、swiftの基本文法から実際に動くiOSアプリをXcodeで開発するところまでを解説します。...