👨‍💻

【Swift】配列操作でよく使われるメソッド

2023/03/31に公開

Swiftの配列操作のメソッドを一覧でまとめてみた。

Swiftの配列の定義

Swiftでは以下のように配列を定義する。

基本的な配列の定義

/// 配列の定義
/// 変数名: [型名] = [要素1, 要素2, ...]
var list: [Int] = [1, 2, 3]

また、型を指定せずSwiftに推論させて配列を定義する方法もある。

/// 配列の定義(型推論を用いた場合)
/// 変数名 = [要素1, 要素2, ...]
var list = [1, 2, 3]

二次元配列

二次元配列を扱うには以下のように配列を定義する。

/// 二次元配列の定義
/// 変数名: [[型名]] = [[要素1, 要素2, ...], [要素n, 要素n+1, ...], ...]
var list: [[Int]] = [[1, 2, 3], [4, 5]]

配列操作のメソッドや便利な使い方

Swiftの配列操作に関するメソッドや便利な使い方を一挙に紹介

配列の結合

var list = [1, 2, 3]
list += [4, 5] // list = list + [4, 5]と同義
print(list)
実行結果
[1, 2, 3, 4, 5]

for文を使った配列操作

for-in構文を使った例

let list = [1, 2, 3, 4, 5]
var total = 0

for value in list { // for-in構文で配列の要素を取得できる
    total += value
}
print(total)
実行結果
15

for-in構文で配列のインデックスと要素を同時に取得

let list = ["a", "b", "c"]
var message = ""

for (index, value) in list.enumerated() { // for-in構文でインデックスと要素を同時に取得
    message += "\(index): \(value)\n"
}
print(message)
実行結果
0: a
1: b
2: c

配列の要素を追加

末尾に追加: appendメソッド

var list = ["a", "b", "c"]
list.append("d") // appendメソッドは配列の末尾に値を追加する
print(list)
実行結果
["a", "b", "c", "d"]

指定の位置に挿入: insertメソッド

var list = ["a", "c", "d"]
list.insert("b", at: 1) // insertメソッドは配列に追加したい値を指定の位置に挿入する
print(list)
実行結果
["a", "b", "c", "d"]

配列を挿入したい場合は、以下の通り

var list = ["a", "d"]
list.insert(contentsOf: ["b", "c"], at: 1) // insertメソッドの引数contentsOfに配列をセットすると、指定の位置に配列の要素を挿入する
print(list)
実行結果
["a", "b", "c", "d"]

配列の要素を削除

空配列で要素を削除

var list = [1, 2, 3]
list = [] // 空配列を変数listに再割り当てすることで、要素を削除する
print(list)
実行結果
[]

配列の先頭の要素を削除: removeFirstメソッド

var list = [1, 2, 3, 4, 5]
list.removeFirst() // removeFirstメソッドで配列の先頭の要素を削除
print(list)
実行結果
[2, 3, 4, 5]

配列の末尾の要素を削除: removeLastメソッド

var list = [1, 2, 3, 4, 5]
list.removeLast() // removeLastメソッドで配列の末尾の要素を削除
print(list)
実行結果
[1, 2, 3, 4]

条件に一致する要素を削除: removeAllメソッド

var list = ["a", "b", "c", "b"]
list.removeAll(where: { (value) in // removeAllメソッドの引数whereにクロージャを指定することで、条件に一致する要素を削除する
    value == "b"
})
print(list)
実行結果
["a", "c"]

配列の範囲を指定して要素を削除: removeSubrangeメソッド

var list = [1, 2, 3, 4, 5]
list.removeSubrange(1...3) // removeSubrangeメソッドの引数にインデックス範囲を指定して配列の要素を削除
print(list)
実行結果
[1, 5]

条件に一致する要素が含まれるかを判定

containsメソッド

var list = [1, 2, 3, 4, 5]
let isFound = list.contains(where: { (value) in // containsメソッドの引数whereにクロージャを指定することで、条件に一致する要素が含まれているか判定
    value > 3
})
print(isFound)
実行結果
true

配列からランダムに要素を取得

randomElementメソッド

var list = ["a", "b", "c"]
if let randomValue = list.randomElement() { // randomElementメソッドは配列からランダムに要素を取得する
    print(randomValue)
}
実行結果
b

配列の要素をシャッフル

shuffledメソッド

var list = ["a", "b", "c"]
let shuffled_list = list.shuffled() // shuffledメソッドは要素の順番をシャッフルした配列を生成する
print(shuffled_list)
実行結果
["c", "a", "b"]

配列の範囲を指定して部分配列を取得

var numbers = [1, 2, 3, 4, 5]
var someNumbers = numbers[0..<2] // 範囲を指定してArraySlice型の部分配列を取得
var newArray = Array(someNumbers)
print(newArray)
実行結果
[1, 2]

配列の要素を置換

replaceSubrangeメソッド

var list = [1, 2, 3, 4, 5]
list.replaceSubrange(0..<2, with: [5, 4]) // replaceSubrangeメソッドは範囲を指定して配列の要素を置換する
print(list)
実行結果
[5, 4, 3, 4, 5]

配列を同じ値で初期化

var list = Array(repeating: 0, count: 5) // Arrayデータタイプは固定値で初期化することができる
print(list)
実行結果
[0, 0, 0, 0, 0]

配列をフィルタリングして新しい配列を取得

filterメソッド

var list = ["a", "b", "c", "d", "e"]
var filteredList = list.filter({ (value) in // filterメソッドの引数にクロージャを指定して、配列をフィルタリング
    value != "b"
})
print(filteredList)
実行結果
["a", "c", "d", "e"]

配列のマッピング

mapメソッド

var list = [1, 2, 3, 4, 5]
var double = list.map({ (value) in //mapメソッドの引数にクロージャを指定して、配列の各要素をマッピング
    value * 2
})
print(double)
実行結果
[2, 4, 6, 8, 10]

配列の要素全体から累積値を取得

reduceメソッド

var list = [1, 2, 3, 4, 5]
let total = list.reduce(0, { $0 + $1 }) // reduceメソッドに初期値とクロージャを指定して、配列の要素全体の累積値を取得する
print(total)
実行結果
15

配列のソート

順序を反転: reversedメソッド

var list = ["a", "b", "c"]
let reversedList = list.reversed() // reversedメソッドは配列の順序を反転する
let newArray = Array(reversedList) // reversedメソッドが返す値はReversedCollectionタイプなので、Arrayでキャスト
print(newArray)
実行結果
["c", "b", "a"]

昇順にソート: sortedメソッド

var list = ["b", "a", "c"]
let sortedList = list.sorted() // sortedメソッドは配列を昇順にソートする
print(sortedList)
実行結果
["a", "b", "c"]

降順にソート: sortedメソッド

var list = ["b", "a", "c"]
let sortedList = list.sorted(by: >) // sortedメソッドの引数byに>オペレータを指定すると、配列を降順にソートする
print(sortedList)
実行結果
["c", "b", "a"]

配列の最大値・最小値

配列の最大値: maxメソッド

var list = [1, 2, 3, 4, 5]
if let maximumNumber = list.max() { // maxメソッドは配列の最大値を取得する
    print(maximumNumber)
}
実行結果
5

配列の最小値: minメソッド

var list = [1, 2, 3, 4, 5]
if let minimumNumber = list.min() { // minメソッドは配列の最小値を取得する
    print(minimumNumber)
}
実行結果
1

配列の先頭・末尾の要素を取得

先頭の要素を取得: firstメソッド

var list = [1, 2, 3, 4, 5]
if let firstNumber = list.first { // firstメソッドは配列の先頭の要素を取得する
    print(firstNumber)
}
実行結果
1

末尾の要素を取得: lastメソッド

var list = [1, 2, 3, 4, 5]
if let lastNumber = list.last { // lastメソッドは配列の末尾の要素を取得する
    print(lastNumber)
}
実行結果
5

条件に一致するインデックスを取得

条件に一致する最初のインデックスを取得: firstIndexメソッド

条件が要素である場合は、firstIndex(of:)を使う。

var list = [1, 2, 3, 2, 1]
if let first = list.firstIndex(of: 1) { // firstIndexメソッドの引数ofに値を指定すると、値に一致する要素の最初のインデックスを取得する
    print(first)
}
実行結果
0

条件が複雑な場合は、firstIndex(where:)を使う。

var list = [1, 2, 3, 2, 1]
if let first = list.firstIndex(where: { $0 > 1 }) { // firstIndexメソッドの引数whereにクロージャを指定すると、条件に一致する要素の最初のインデックスを取得する
    print(first)
}
実行結果
1

条件に一致する最後のインデックスを取得:lastIndexメソッド

条件が要素である場合は、lastIndex(of:)を使う。

var list = [1, 2, 3, 2, 1]
if let last = list.lastIndex(of: 1) { // lastIndexメソッドの引数ofに値を指定すると、値に一致する要素の最後のインデックスを取得する
    print(last)
}
実行結果
4

条件が複雑な場合は、lastIndex(where:)を使う。

var list = [1, 2, 3, 2, 1]
if let last = list.lastIndex(where: { $0 > 1 }) { // lastIndexメソッドの引数whereにクロージャを指定すると、条件に一致する要素の最後のインデックスを取得する
    print(last)
}
実行結果
3

Discussion