# 配列 | Array型
配列とは、同じ型の値を順番に並べたコレクションです。同じ値が異なる位置に複数回現れることもあります。
# 配列の宣言方法
Swiftの配列は基本的に次のフォーマットで書くことができます。[]
の中にカンマ区切りで値を列挙して定義します。
let array: Array<Element> = ["値", "値"]
次の例では、Int型を含む配列を生成しています。
let a: Array<Int> = [1,2,3]
# シンタックスシュガー
Array<Element>
の型アノテーションは、シンタックシュガーを使って、[値の型]
のフォーマットで書くことができます。
let a: [Int] = [1,2,3]
一般的に、シンタックスシュガーが使われることが多いので積極的に使いましょう。
# 型推論
Swiftは、配列に含む要素から型を推論できるので、宣言時には型を省略して書くことができます。前節の例を型アノテーションを省略して書くと、次のようになります。
let a = [1,2,3]
しかし、空の配列を定義する場合は、値の型推論ができないため、明示的に型を指定する必要があります。
let a: [Int] = []
型を指定しないと、コンパイラはエラーを出力します。
let a = []
/* 実行結果 */
// error: empty collection literal requires an explicit type
// let a = []
# 空の配列
空の配列は、イニシャライザを使って次のように書くこともできます。
let a = [Int]()
// let a: [Int] = [] と同じ
# 複数の型
また、複数の型の要素がある場合は、型の推論によって型を一つにできないため、明示的にAny型を指定する必要があります。
let a: [Any] = [100, "Hello", 0.5]
# 配列要素へのアクセス
配列要素へのアクセスは、インデックスを指定して要素を取得することができます。
配列のあとに、[インデックス]
を添えてアクセスします。
let a = ["Cat", "Dog", "Rabbit"]
a[0] // Cat
a[1] // Dog
a[2] // Rabbit
存在しない要素へアクセスすると、実行時エラーになります。
var a = ["Cat", "Dog", "Rabbit"]
a[3] // 存在しない
/* 実行結果 */
// Fatal error: Index out of range
// Current stack trace:
インデックスを指定する以外にも、first
や last
などでアクセスすることもできます。
let a = ["Cat", "Dog", "Rabbit"]
a.first // Optional("Cat")
a.last // Optional("Rabbit")
first
や last
などでアクセスした際は、返り値はOptional型になります。
# 配列要素の更新
配列の要素を更新するには、更新したい要素のインデックスを指定して、値を代入すると更新することができます。
var a = ["Cat", "Dog", "Rabbit"]
// 更新したい要素のインデックスを指定する
a[0] = "Hamster"
a // ["Hamster", "Dog", "Rabbit"]
let
で宣言すると代入が不可になるのでコンパイラはエラーを出力します。
// let で宣言
let a = ["Cat", "Dog", "Rabbit"]
a[0] = "Hamster"
/* 実行結果 */
// error: cannot assign through subscript: 'a' is a 'let' constant
// a[0] = "Hamster "
// note: change 'let' to 'var' to make it mutable
// let a = ["Cat", "Dog", "Rabbit"]
# 配列要素の追加
配列の要素を追加するには、以下の方法があります。
# append
appendは、配列の末尾に要素を追加することができます。
var a = ["Cat", "Dog", "Rabbit"]
// 末尾に、Hamster を追加する
a.append("Hamster")
a // ["Cat", "Dog", "Rabbit", "Hamster"]
配列に別の配列の要素を入れたい場合は、contentsOf:
を使用することができます。
var a = ["Cat", "Dog", "Rabbit"]
var b = ["Hamster"]
a.append(contentsOf: b)
a // ["Cat", "Dog", "Rabbit", "Hamster"]
# insert
insertは、任意の位置に要素を追加することができます。
var a = ["Cat", "Dog", "Rabbit"]
// 先頭に、Hamster を追加する
a.insert("Hamster", at: 0)
a // ["Hamster", "Cat", "Dog", "Rabbit"]
# +演算子で結合
+演算子は、2つの配列の要素を結合することができます。
let a = [1,2,3]
let b = [4,5,6]
// +演算子で結合
let c = a + b
c // [1, 2, 3, 4, 5, 6]
同じ値があったとしてもそのまま結合されます。
let a = [1,2,3]
let b = [3,4,5,6]
let c = a + b
c // [1, 2, 3, 3, 4, 5, 6]
# 配列要素の削除
配列の要素を削除するには、以下の方法があります。
# remove
removeは、インデックスを指定して要素を削除することができます。
var a = [1,2,3]
// 削除したい要素のインデックスを指定する
a.remove(at: 0)
a // [2, 3]
# removeFirst
removeFirstは、配列の先頭の要素を削除することができます。
var a = [1,2,3]
a.removeFirst()
a // [2, 3]
# removeLast
removeLastは、配列の末尾の要素を削除することができます。
var a = [1,2,3]
a.removeLast()
a // [1, 2]
# removeAll
removeAllは、配列の全ての要素を削除することができます。実行後は、空の配列になります。
var a = [1,2,3]
a.removeAll()
a // []
# その他の配列の操作
# 配列の要素数を調べる
配列の要素数を調べるには、count
を使うことができます。
let a = [1,2,3]
a.count // 3
# 配列が空か調べる
配列が空かどうがを調べるには、isEmpty
を使うことができます。空の場合は、true
を返し、要素がある場合は false
を返します。
let a: [Int] = []
a.isEmpty // true
let b = [1,2,3]
b.isEmpty // false