SwiftでArray操作をするたった17選の方法

Swift言語でのArray操作の手法をイラスト付きで解説する画像Swift
この記事は約24分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Swiftは、AppleがiOS、macOS、watchOS、tvOS向けのアプリケーション開発のために設計した新しいプログラム言語です。

この言語は非常に直感的で、安全性を重視した設計がなされています。

今回の記事では、SwiftでのArray(配列)操作に焦点を当てて、基本的な操作から応用、さらに注意点やカスタマイズ方法まで、初心者から上級者まで役立つ手法を徹底的に解説していきます。

サンプルコードも豊富に取り揃えていますので、SwiftでのArray操作を学びながら実践的な内容も掴めるでしょう。

●SwiftとArrayの基本について

Swiftとは何か、そしてSwiftで扱う基本的なコレクションの一つであるArrayについて、初めに概観していきましょう。

○Swiftとは

Swiftは、Appleが開発したオープンソースのプログラム言語です。

Objective-Cの後継として登場し、その高速性と安全性で多くの開発者から支持を受けています。

Swiftは学習がしやすく、コードが読みやすいという特徴があります。

Swiftにおけるデータの扱い方は非常に重要です。

その中で、Arrayは基本的なデータ構造として頻繁に利用されます。

□Arrayの特徴と基本的な使い方

Arrayは、同じ型の複数のデータを順番に格納するためのコレクションタイプです。

SwiftのArrayは、型安全であるため、格納される要素の型を明示的に指定する必要があります。

SwiftのArrayはその利便性から、多くの場面で活躍します。

●SwiftでのArray操作の方法

SwiftにおけるArrayの操作は多岐にわたります。

ここでは、基本的な操作から始めて、初心者から上級者に向けたさまざまな手法を解説していきます。

それぞれの手法には、実践的なサンプルコードとその詳細な説明を添えています。

○サンプルコード1:Arrayの生成方法

SwiftでArrayを生成する方法はいくつか存在します。

基本的なArrayの生成にはリテラルを使用する方法が一般的です。

// 数値のArrayを生成
var numbers: [Int] = [1, 2, 3, 4, 5]

このコードでは、整数型の値を要素として持つArrayを生成しています。

この例では、numbersという変数名で、1から5までの連続する整数を格納しています。

同様に、文字列を格納するArrayも簡単に生成できます。

// 文字列のArrayを生成
var fruits: [String] = ["apple", "banana", "cherry"]

このコードでは、文字列型の値を要素として持つArrayを生成しています。

この例で、fruitsという変数名で、”apple”, “banana”, “cherry”の3つの文字列を格納しています。

○サンプルコード2:Arrayに要素を追加する方法

Arrayに新しい要素を追加するには、appendメソッドや+=演算子を使用します。

まず、appendメソッドを使用した例を見てみましょう。

// 数値のArrayを生成
var numbers: [Int] = [1, 2, 3]

// Arrayに要素を追加
numbers.append(4)

このコードでは、最初に1から3までの整数を格納するArrayを生成し、その後、appendメソッドを使用して4を追加しています。

この操作後のnumbers[1, 2, 3, 4]となります。

次に、+=演算子を使用して複数の要素を追加する例です。

// 文字列のArrayを生成
var fruits: [String] = ["apple", "banana"]

// Arrayに要素を追加
fruits += ["cherry", "date"]

このコードでは、”apple”と”banana”を格納するArrayを生成し、その後、+=演算子を使用して”cherry”と”date”の2つの文字列を追加しています。

この操作後のfruits["apple", "banana", "cherry", "date"]となります。

○サンプルコード3:Arrayから要素を削除する方法

SwiftのArrayには、要素を削除するためのいくつかのメソッドが実装されています。

削除操作は、配列のサイズや中身によって、様々な方法で実施できます。

ここでは、その代表的なものを取り上げます。

□指定されたインデックスの要素を削除する

SwiftでArrayの特定の位置にある要素を削除するには、remove(at:)メソッドを利用します。

このメソッドは、引数として与えられたインデックス位置の要素を削除します。

var numbers = [10, 20, 30, 40, 50]
numbers.remove(at: 2)
print(numbers)

このコードではremove(at:)を使って、Array内の3番目の要素(30)を削除しています。

この例では、初めに5つの要素が含まれるArrayを定義し、3番目の要素を削除した後のArrayの内容を表示しています。

実行後のArrayの内容は、[10, 20, 40, 50] となります。

□最初の要素を削除する

Arrayの最初の要素を削除する場合、removeFirst()メソッドを用います。

このメソッドを呼び出すことで、Arrayの先頭にある要素が削除されます。

var fruits = ["apple", "banana", "cherry"]
fruits.removeFirst()
print(fruits)

このコードでは、removeFirst()を使用して、最初の要素(“apple”)を削除しています。

この例では、3つの要素が含まれるArrayを定義した後、最初の要素を削除し、その後のArrayの内容を表示しています。

実行後のArrayの内容は、[“banana”, “cherry”] となります。

□最後の要素を削除する

最後の要素を削除する際は、removeLast()メソッドを使います。

このメソッドにより、Arrayの最後の要素が削除されます。

var animals = ["dog", "cat", "bird"]
animals.removeLast()
print(animals)

このコードでは、removeLast()を使って最後の要素(“bird”)を削除しています。

この例では、3つの要素が含まれるArrayを定義し、最後の要素を削除した後のArrayの内容を表示しています。

実行後のArrayの内容は、[“dog”, “cat”] となります。

○サンプルコード4:Arrayの要素を取得する方法

SwiftのArrayから要素を取得する際には、いくつかの方法があります。

インデックスを指定して取得するだけでなく、範囲指定や条件に合う要素を取得する方法もあります。

Arrayの要素は、インデックスを指定することでアクセスできます。

インデックスは0から始まり、Arrayのサイズ-1までの範囲で指定します。

var colors = ["red", "blue", "green"]
let firstColor = colors[0]
print(firstColor)

このコードでは、インデックス0を指定して、Arrayの最初の要素(“red”)を取得しています。

この例では、3つの要素が含まれるArrayを定義し、最初の要素を取得して表示しています。

実行後の表示内容は、”red” となります。

○サンプルコード5:Arrayの要素を変更する方法

SwiftのArrayでは、インデックスを指定して要素を変更することができます。

具体的には、配列名[インデックス] = 値 の形式を使って、指定した位置の要素を新しい値に更新することができます。

下記のサンプルコードは、Arrayの特定の位置にある要素を変更する方法を表しています。

この例では、最初に文字列の要素を持つArrayを作成し、2番目の要素を新しい文字列に変更しています。

var fruits = ["apple", "banana", "cherry"]
fruits[1] = "grape"
print(fruits)

このコードでは、fruitsという名前のArrayを定義しており、初めは["apple", "banana", "cherry"]という3つの要素を持っています。

次に、fruits[1] = "grape"の行で、2番目の要素(インデックスは0から始まるので"banana")を"grape"に変更しています。

このサンプルコードを実行すると、コンソールには、["apple", "grape", "cherry"]という出力が表示されるでしょう。

これは、2番目の要素が正しく"grape"に変更されたことを表しています。

なお、存在しないインデックスを指定して要素を変更しようとすると、ランタイムエラーが発生します。

そのため、要素を変更する前に、インデックスが有効な範囲内にあることを確認することが重要です。

○サンプルコード6:Arrayの長さを取得する方法

SwiftのArrayの長さ(要素の数)を取得するには、countプロパティを使用します。

countプロパティは、Arrayが持っている要素の総数を返すプロパティです。

下記のサンプルコードは、Arrayの長さを取得する方法を表しています。

この例では、4つの文字列の要素を持つArrayの長さを取得し、コンソールに表示しています。

let animals = ["cat", "dog", "bird", "fish"]
let numberOfAnimals = animals.count
print("Arrayには\(numberOfAnimals)匹の動物が含まれています。")

このコードでは、animalsという名前のArrayを定義し、4つの動物の名前が含まれています。

次に、countプロパティを使用してArrayの長さを取得し、変数numberOfAnimalsに代入しています。

このサンプルコードを実行すると、コンソールには「Arrayには4匹の動物が含まれています。」という出力が表示されるでしょう。

○サンプルコード7:Arrayをソートする方法

SwiftにおけるArrayのソートは、非常に簡単で、効率的に行うことができます。

SwiftのArrayには、sortsortedなどの関数が組み込まれており、これを使用することで要素をソートすることができます。

まず、基本的なソート方法を見ていきましょう。

// 昇順にソートする
var numbers = [3, 1, 4, 1, 5, 9]
numbers.sort()
print(numbers)

このコードでは、整数を要素とするArrayのnumbersを昇順にソートしています。

sortメソッドはArrayを直接変更するので、ソート後のnumbersを出力すると、昇順に整列された結果が得られます。

次に、降順にソートする方法を見ていきましょう。

// 降順にソートする
numbers.sort(by: >)
print(numbers)

この例では、sortメソッドの引数として>演算子を使い、降順にソートしています。

さて、上記のコードの実行結果ですが、最初のコードでは[1, 1, 3, 4, 5, 9]と昇順にソートされたArrayが出力され、次のコードでは[9, 5, 4, 3, 1, 1]と降順にソートされたArrayが出力されます。

Swiftでは、文字列のArrayも同様にソートすることができます。

例として、次のようなコードを考えてみましょう。

var fruits = ["apple", "orange", "banana", "grape"]
fruits.sort()
print(fruits)

このコードの実行結果は、["apple", "banana", "grape", "orange"]となります。

○サンプルコード8:Arrayのサブセットを取得する方法

Arrayの中から特定の範囲のサブセットを取得するには、prefixsuffixといったメソッド、またはスライスを使用します。

まず、prefixメソッドを使用して、Arrayの先頭から指定した数の要素を取得する方法を見てみましょう。

let numbers = [10, 20, 30, 40, 50]
let firstThree = numbers.prefix(3)
print(firstThree)

このコードでは、prefixメソッドを使って、先頭から3つの要素を取得しています。

この例の実行結果は、[10, 20, 30]となります。

次に、suffixメソッドを使って、Arrayの末尾から指定した数の要素を取得する方法を紹介します。

let lastTwo = numbers.suffix(2)
print(lastTwo)

この例の実行結果は、[40, 50]となります。

また、SwiftのArrayでは、特定の範囲の要素をスライスとして取得することもできます。

この操作は次のように行います。

let middleNumbers = numbers[1...3]
print(middleNumbers)

このコードの実行結果は、[20, 30, 40]となり、指定した範囲の要素を正確に取得することができます。

○サンプルコード9:Arrayの要素をシャッフルする方法

SwiftでのArray操作において、Arrayの要素をランダムにシャッフルする方法について解説します。

Arrayの要素をシャッフルすることは、ランダムな順番のデータを必要とするゲームやクイズアプリなど、さまざまな場面で役立ちます。

var fruits = ["りんご", "みかん", "ぶどう", "バナナ", "キウイ"]
fruits.shuffle()
print(fruits)

このコードでは、shuffle()メソッドを使ってArrayの要素をランダムにシャッフルしています。

この例では、fruitsという名前のArrayに5つの果物の名前が入っており、シャッフル後の内容を表示しています。

実際に上記のコードを実行すると、fruitsの中身がランダムにシャッフルされた状態で出力されます。

例えば、「キウイ」「みかん」「りんご」「ぶどう」「バナナ」のようになるかもしれません。

○サンプルコード10:Array内の特定の要素を検索する方法

次に、Array内の特定の要素を検索する方法について紹介します。

特定の要素がArray内に存在するかどうかを確認する場合や、その要素のインデックスを取得したい場合に利用します。

let numbers = [3, 6, 8, 1, 4, 9, 7]
if let index = numbers.firstIndex(of: 4) {
    print("4のインデックスは\(index)です。")
} else {
    print("4はArray内に存在しません。")
}

このコードでは、firstIndex(of:)メソッドを用いて、Array内の特定の要素のインデックスを検索しています。

この例では、numbersという名前のArrayから数字の「4」の位置を探しています。

上記のコードを実行すると、数字の「4」のインデックスがnumbersArray内でどの位置にあるかを示すメッセージが出力されます。

この場合、出力されるメッセージは「4のインデックスは4です。」となります。

●SwiftでのArrayの応用例

Swift言語は非常に柔軟で、Arrayの操作も様々な手法が提供されています。

基本的な操作から少し変わった応用例まで、幅広いシチュエーションでのArrayの取り扱い方を解説します。

次の内容を通じて、SwiftでのArray操作のさらなる深化を目指しましょう。

○サンプルコード11:二次元Arrayの操作方法

Swiftでは、1次元のArrayだけでなく、2次元やそれ以上の多次元Arrayも簡単に操作することができます。

ここでは、二次元Arrayの基本的な操作方法を表すサンプルコードを紹介します。

var twoDimensionalArray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

// 特定の行を取得
let firstRow = twoDimensionalArray[0]
print(firstRow) // [1, 2, 3]

// 特定の要素を取得
let element = twoDimensionalArray[1][2]
print(element) // 6

このコードでは、3×3の二次元Arrayを使っている点に注意してください。

最初のprint関数は、twoDimensionalArrayの最初の行を出力するもので、結果として[1, 2, 3]が表示されます。

次に、twoDimensionalArray[1][2]で、二次元Arrayの2行目の3番目の要素を取得しています。

その結果、6という数字が表示されます。

○サンプルコード12:ArrayとMap関数の使用例

SwiftのArrayには、map関数が組み込まれており、これを使用することでArrayの各要素に対して一定の操作を行い、新しいArrayを生成することができます。

let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers) // [1, 4, 9, 16, 25]

このコードでは、numbersという名前のArrayに対してmap関数を適用し、各要素を自身で掛け合わせることで新しいArraysquaredNumbersを生成しています。

この例では、各数字を2乗して新しいArrayを作成しています。

したがって、結果として[1, 4, 9, 16, 25]というArrayが出力されます。

○サンプルコード13:Arrayのフィルタリング方法

SwiftでのArray操作には多くの方法がありますが、特定の条件に合致する要素だけを取り出したい場合に非常に便利なのがフィルタリングです。

フィルタリングにはfilterメソッドを使用します。

下記のコードでは、偶数のみを取り出すフィルタリングを行っています。

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers)

このコードでは、1から10までの整数が格納されたArrayから、偶数だけを取り出して新たなArrayを作成しています。具体的にはfilterメソッドを使用し、その中でラムダ式(クロージャ)を用いて偶数であるかの条件判定をしています。

この例では、$0がArrayの要素を示しており、その要素が2で割り切れるかどうかを判定しています。

このコードを実行すると、偶数のみを取り出した結果、[2, 4, 6, 8, 10]というArrayが出力されます。

○サンプルコード14:Arrayのreduce操作の使用例

Arrayには、要素を一つずつ取り出して何らかの処理を行い、最終的な一つの結果を得るためのreduceメソッドが提供されています。

reduceは初期値と、2つの引数を取るクロージャを指定します。

2つの引数は、これまでの累積結果と現在の要素を表します。

let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum)

このコードでは、1から5までの整数が格納されたArrayの要素の合計を計算しています。

reduceメソッドを使用し、初期値として0を指定しています。

クロージャ内では、$0がこれまでの累積結果、$1が現在の要素を示しており、これらを足しています。

このコードを実行すると、1から5までの整数の合計である15が出力されます。

○サンプルコード15:ArrayとSetの違いと利用シーン

SwiftにおけるArrayとSetは、それぞれ異なる特性を持ちます。

この違いを理解することで、どちらを選択すべきかの判断が容易になります。

  1. 順序:Arrayは順序が保持されるのに対し、Setは順序が保持されません。
  2. 重複:Arrayは重複した要素を許容しますが、Setは重複した要素を許容しません。

ここではそれぞれの特性を表すサンプルコードを紹介します。

// Arrayの例
var arrayExample = [1, 2, 2, 3, 3]
print(arrayExample)  // [1, 2, 2, 3, 3]

// Setの例
var setExample: Set = [1, 2, 2, 3, 3]
print(setExample)  // {1, 2, 3}

このコードでは、ArrayとSetの基本的な特性を示しています。Arrayの例では、重複した値がそのまま保存されています。

一方、Setの例では、重複した値が排除され、一意の値のみが保存されています。

利用シーンとしては、要素の順序が重要な場合や重複を許容したい場合はArrayを、重複を排除したい場合や順序が不要な場合はSetを選択します。

○サンプルコード16:ArrayとDictionaryの連携方法

SwiftのArrayとDictionaryは、非常に強力な組み合わせとなります。

Arrayを使用して順序を保持しつつ、Dictionaryでキーと値の組み合わせを保持することができます。

下記のコードは、名前とスコアを連携して保持する例を表しています。

var students: [Dictionary<String, Int>] = [
    ["Alice": 85],
    ["Bob": 90],
    ["Charlie": 78]
]

// Bobのスコアを取得
let bobsScore = students[1]["Bob"]
print(bobsScore)  // Optional(90)

このコードでは、3人の生徒の名前とスコアをArrayとDictionaryを組み合わせて保持しています。

Bobのスコアを取得するために、ArrayのインデックスとDictionaryのキーを組み合わせて使用しています。

○サンプルコード17:Arrayの拡張機能の作成方法

Swiftでは、拡張(extension)を使用してArrayに新しい機能を追加することができます。

これにより、Arrayの操作がより簡単かつ直感的になります。

例として、Arrayに合計値を返す新しいメソッドを追加する方法を見てみましょう。

extension Array where Element: Numeric {
    func total() -> Element {
        return self.reduce(0, +)
    }
}

let numbers = [1, 2, 3, 4, 5]
print(numbers.total())  // 15

このコードでは、Arrayの拡張を使って、Array内の数値の合計を返す新しいメソッドtotalを追加しています。

この例では、numbersというArrayの合計値を計算して出力しています。

●注意点と対処法

Swiftを用いてArrayの操作を行う際には、初心者から上級者まで、様々なエラーやトラブルが発生する可能性があります。

特にSwiftは静的な型システムを持っているため、型に関連したエラーが発生しやすいです。

ここでは、SwiftでのArray操作時に遭遇する一般的なエラーや注意点、そしてそれらをどのように解決・回避するかについて詳しく説明します。

○Array操作時の一般的なエラーとその解決策

□範囲外のインデックスを指定したエラー

Arrayのサイズを超えるインデックスを指定して要素にアクセスしようとすると、ランタイムエラーが発生します。

このコードでは、Arrayから要素を取得する際に範囲外のインデックスを指定しているコードを表しています。

この例では、5つの要素を持つArrayから6番目の要素を取得しようとしています。

let array = [1, 2, 3, 4, 5]
let value = array[5]  // エラーが発生

このエラーを回避するには、インデックスがArrayの範囲内であることを確認するコードを追加します。

let array = [1, 2, 3, 4, 5]
if array.indices.contains(5) {
    let value = array[5]
} else {
    print("指定したインデックスは範囲外です。")
}

このコードを実行すると、「指定したインデックスは範囲外です。」というメッセージが表示されます。

□型の不一致によるエラー

SwiftのArrayは静的な型を持つため、宣言した型と異なる型の要素を追加しようとするとコンパイルエラーが発生します。

このコードでは、Int型のArrayにString型の要素を追加しようとするコードを表しています。

この例では、「Hello」をInt型のArrayに追加しようとしています。

var intArray: [Int] = [1, 2, 3]
intArray.append("Hello")  // エラーが発生

このエラーを回避するには、追加する要素の型がArrayの型と一致することを確認する必要があります。

var intArray: [Int] = [1, 2, 3]
intArray.append(4)

このコードを実行すると、正常に4がArrayに追加されます。

□変更不可能なArrayに対する変更操作

letキーワードを使用して宣言されたArrayは変更不可能となります。

このようなArrayに対して要素の追加や削除を行うと、コンパイルエラーが発生します。

このコードでは、変更不可能なArrayに対して要素を追加しようとするコードを表しています。

この例では、変更不可能なArrayに4を追加しようとしています。

let immutableArray = [1, 2, 3]
immutableArray.append(4)  // エラーが発生

このエラーを回避するには、varキーワードを使用してArrayを宣言することで、変更可能なArrayを作成します。

var mutableArray = [1, 2, 3]
mutableArray.append(4)

このコードを実行すると、正常に4がArrayに追加されます。

●カスタマイズ方法

SwiftにおけるArrayのカスタマイズは非常に強力なもので、あらゆるシチュエーションに対応することが可能です。

ここでは、SwiftでのArrayのカスタマイズ方法について詳細に説明します。特に初心者から上級者まで幅広く使えるテクニックとサンプルコードを紹介します。

○Arrayのカスタマイズ例1:特定の条件を満たす要素のみを取得する

Swiftでは、Arrayから特定の条件を満たす要素のみを取得する方法が提供されています。

この方法を利用すると、非常に柔軟なデータ操作が可能となります。

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers)

このコードでは、1から10までの数字が入ったArrayから、偶数のみを取得しています。

この例ではfilterメソッドを使用して、条件に合致する要素のみを新しいArrayとして取得しています。

実際に上記のコードを実行すると、[2, 4, 6, 8, 10]という結果が得られるでしょう。

○Arrayのカスタマイズ例2:Arrayの全要素に対して特定の操作を適用する

SwiftのArrayには、全ての要素に対して特定の操作を適用するメソッドが用意されています。

これにより、一度に多くの要素を処理することが可能です。

let originalNumbers = [1, 2, 3, 4, 5]
let doubledNumbers = originalNumbers.map { $0 * 2 }
print(doubledNumbers)

このコードでは、originalNumbersの各要素を2倍にした新しいArrayを作成しています。

この例ではmapメソッドを使用しています。

実際に上記のコードを実行すると、[2, 4, 6, 8, 10]という結果が得られます。

○Arrayのカスタマイズ例3:特定の条件を満たす要素が存在するかを確認する

SwiftのArrayには、特定の条件を満たす要素が存在するかを確認する方法も提供されています。

let animals = ["cat", "dog", "bird", "fish", "lion"]
let containsCat = animals.contains { $0 == "cat" }
print(containsCat)

このコードでは、animalsというArrayに”cat”という文字列が含まれているかどうかを確認しています。

この例ではcontainsメソッドを使用しています。

実際に上記のコードを実行すると、trueという結果が得られます。

まとめ

SwiftでのArray操作は非常に強力であり、データを効率的に処理するための様々な手法が提供されています。

今回の記事では、Arrayの基本的な操作から、さらに高度なカスタマイズ方法までを詳細に解説しました。

初心者から上級者まで、あらゆるレベルの開発者がこれらの技術を活用することで、データ操作の効率やプログラムの品質を向上させることができます。

特に、filterやmapのようなメソッドの活用は、日常のプログラミングにおいて非常に役立ちます。

これらのメソッドを使いこなすことで、より簡潔で読みやすいコードを書くことが可能となります。

また、Arrayのカスタマイズ方法を理解し、適切な場面で応用することで、さらに柔軟なデータ操作が可能となります。

これにより、様々な要件や問題に対して迅速に対応することができるようになります。

今回紹介した内容をしっかりと理解し、実際の開発に活用することで、Swiftプログラミングのスキルを一段と向上させることができるでしょう。