Balbas Code

Swiftで配列、構造体を効率的に検索する方法

公開日: 2023-11-04 09:11:22
更新日: 2023-11-04 09:12:53

配列は、プログラミングにおいて最もよく使用されるデータ構造の一つです。Swiftにおいても、配列を扱う際には様々な便利なメソッドが提供されています。特に、配列内の要素を検索する方法にはいくつかのパターンがあります。今回は、それらの方法をご紹介します。


 


文字列の配列を検索


1. 部分一致での検索


Swiftでは、filterメソッドとcontainsメソッドを組み合わせて、配列内の文字列が特定の文字列を含むかどうかを調べることができます。例えば、ある配列から"an"という文字列を含む要素を抽出したい場合、filterメソッドを利用します。


let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print("偶数の配列: \(evenNumbers)")

 


2. 前方一致・後方一致での検索


配列内の文字列が特定の文字列で始まるか、または終わるかを調べるには、hasPrefixメソッドとhasSuffixメソッドを使用します。


// "Ap"で始まる要素を検索
let fruits = ["Apple", "Orange", "Banana", "Grapes", "Cherry"]

let result = fruits.filter { $0.lowercased().hasPrefix("ap") }
print(result) // ["Apple"]


// "es"で終わる要素を検索
let result = fruits.filter { $0.lowercased().hasSuffix("es") }
print(result) // ["Grapes"]

 


 


3. 完全一致での検索


配列内に特定の文字列と完全に一致する要素が含まれているかを調べるには、containsメソッドを使用します。


// "Banana"と完全一致する要素があるか検索
let fruits = ["Apple", "Orange", "Banana", "Grapes", "Cherry"]

let doesContainBanana = fruits.contains("Banana")
print(doesContainBanana) // true

 


 


4. 条件に一致する最初の要素の検索


配列内で条件に一致する最初の要素を見つけたい場合は、first(where:)メソッドを利用します。


// "O"で始まる最初の要素を検索
let fruits = ["Apple", "Orange", "Banana", "Grapes", "Cherry"]

if let firstMatch = fruits.first(where: { $0.hasPrefix("O") }) {
print(firstMatch) // "Orange"
}

 


 


structの配列を検索


文字列だけでなく、カスタムデータ構造の配列も同様の方法で検索することができます。例えば、Personというstructがあるとして、その配列から特定の条件に一致する要素を検索する場合も、上記のメソッドを利用することができます。


struct Person {
var name: String
var age: Int
}

 


1. 特定の条件を満たす要素の検索


Personの年齢が30以上の要素を検索する場合、filterメソッドを利用できます。


let people = [
Person(name: "John", age: 30),
Person(name: "Jane", age: 25),
Person(name: "Bob", age: 40)
]

// 年齢が30以上の人を検索
let result = people.filter { $0.age >= 30 }
print(result)
// [Person(name: "John", age: 30),
  Person(name: "Bob", age: 40)]

 


 


2. 特定の条件に一致する最初の要素の検索


名前が"Jane"のPersonを検索する場合、first(where:)メソッドが便利です。


// 名前が"Jane"の人を検索
if let jane = people.first(where: { $0.name == "Jane" }) {
print(jane) // Person(name: "Jane", age: 25)
}

 


 


3. 特定の条件に一致する要素のインデックスの検索


特定の条件に一致する要素のインデックスを知りたい場合、index(where:)メソッドを使用します。


// 年齢が40の人のインデックスを検索
if let index = people.index(where: { $0.age == 40 }) {
print(index) // 2
}

 


まとめ


Swiftには、配列の要素を効率的に検索するためのさまざまなメソッドが用意されています。これらのメソッドをうまく組み合わせることで、コードの可読性や効率を向上させることができます。ぜひ、日々のコーディングに活かしてみてください。