Swift provides map
, filter
, reduce
, ... for Array
\'s, but I am not finding some
(or any
) or
Update:
Use allSatisfy (all
) and contains(where:) (some
).
Old answer:
Just use contains.
// check if ALL items are completed
// so it does not contain a single item which is not completed
!items.contains { !$0.completed }
// check if SOME item is completed
// so test if there is at least one item which is completed
items.contains { $0.completed }
To replace any
/some
, you can use SequenceType's contains method (there's one version which takes a boolean predicate; the other one takes an element and works only for sequences of Equatable elements).
There's no built-in function like all
/every
, but you can easily write your own using an extension:
extension SequenceType
{
/// Returns `true` iff *every* element in `self` satisfies `predicate`.
func all(@noescape predicate: Generator.Element throws -> Bool) rethrows -> Bool
{
for element in self {
if try !predicate(element) {
return false
}
}
return true
}
}
Or, thanks to De Morgan, you can just negate the result of contains
: !array.contains{ !predicate($0) }
.
By the way, these work on any SequenceType, not just Array. That includes Set and even Dictionary (whose elements are (key, value)
tuples).