👍
Swift:配列の中の要素に対して全て条件を満たしているかを返す - allSatisfy
配列の中の要素全てが特定の条件を満たしているかを確認したいというとき、ありますよね。
例えば、Int型の配列があり、中身が全て偶数かどうか確認したい。
let numbers = [2, 4, 6, 8, 10]
これまでは以下のようにforEach
などを利用して全ての要素をチェックする必要がありました。
let numbers = [2, 4, 6, 8, 10]
var isAllEven = true
numbers.forEach { number in
if number % 2 != 0 {
isAllEven = false
}
}
if isAllEven {
print("全て偶数です")
} else {
print("奇数が混ざっています")
}
// 全て偶数です
もっと簡単な確認方法はないものかと調べていたら、allSatisfy
というメソッドがあるようでした。
@inlinable public func allSatisfy(_ predicate: (Element) throws -> Bool) rethrows -> Bool
allSatisfy
を使った場合、上記と同じ偶数チェックはこのように書くことができます。
let numbers = [2, 4, 6, 8, 10]
if numbers.allSatisfy({ $0 % 2 == 0 }) {
print("全て偶数です")
} else {
print("奇数が混ざっています")
}
// 全て偶数です
要素全てに対して同じ条件文を適用、比較をするのであれば、非常に便利ですね。
Appleのドキュメントにはこんなサンプル文も載っていました。
let names = ["Sofia", "Camilla", "Martina", "Mateo", "Nicolás"]
let allHaveAtLeastFive = names.allSatisfy({ $0.count >= 5 })
// allHaveAtLeastFive == true
上記のように配列の中身が全て○文字以上かどうかをチェックすることもallSatisfy
を使えば簡単にできますね。
Discussion