👨💻
【Swift】配列操作でよく使われるメソッド
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