Swift - 配列から指定したプロパティの値を持つオブジェクトを抽出する方法
Swift のオブジェクトの配列 (array) があって、ID などの値を指定して、その ID を持つオブジェクトを取得したいような時ありませんか?
例えば、次のような Employee struct の配列 [Employee] があって、そのうち、employeeID = 3 の Employee オブジェクトを取得したいような時です。
struct Employee {
var employeeID: Int
var firstName: String
var lastName: String
}
今回は、配列内に条件に合致するオブジェクトかひとつだけ存在すると想定されるようなケースを想定しています。
Swift オブジェクトの配列から、指定したプロパティの値を持つオブジェクトを抽出する方法についてご説明します。
Swift の配列から指定したプロパティの値を持つオブジェクトを取得する方法
Swift で配列を ID などの値を指定してフィルターして、その ID を持つオブジェクトを取得したい時には、Array の first メソッドが使えます。
使い方は Array.first(where: { 条件式 }) のように使います。
first メソッドは条件式に合致する最初の要素を返し、条件に合う要素がない場合は nil を返します。
Swift の struct オブジェクトの配列に対して、指定した ID を持つオブジェクトを取得するサンプルーコードは次の通りです。
struct Employee {
var employeeID: Int
var firstName: String
var lastName: String
}
var employees: [Employee] = []
employees.append(Employee(employeeID: 1, firstName: "Saki", lastName: "Yamada"))
employees.append(Employee(employeeID: 2, firstName: "Akira", lastName: "Tanaka"))
employees.append(Employee(employeeID: 3, firstName: "Ryo", lastName: "Suzuki"))
employees.append(Employee(employeeID: 4, firstName: "Keita", lastName: "Sato"))
employees.append(Employee(employeeID: 5, firstName: "Yuki", lastName: "Nishida"))
if let emp = employees.first(where: { $0.employeeID == 3 }) {
print(emp.employeeID, emp.firstName, emp.lastName)
} else {
print("Not found")
}
7 ~ 12 行目は Employee struct のオブジェクトを持つ配列を生成しています。
14 行目で、if let で Array の first メソッドを使って、employees の中から、employeeID が 3 の Employee オブジェクトを取得しています。
$0 は closure のひとつめの引数を示しています。 $0 は Employee 型の引数ですので、employeeID が 3 の時に True になるように $0.employeeID == 3 と指定しています。
条件に合致する Employee オブジェクトが見つかった場合は、employeeID、firstName、lastName が print され、みつからなかった場合は Not found と print されます。
上のコードを実行すると次のようになります。
3 Ryo Suzuki
employeeID が 3 の employeeID、firstName、lastName が print されています。
14 行目 を $0.employeeID == 6 に変更して実行すると、Not found と print されました。
以上、Swift の配列から指定したプロパティの値を持つオブジェクトを取得する方法をご説明しました。