检查Swift数组元素是否存在多个条件



我有对象数组,其中包含具有字符串值的属性。我想要的是,返回一个Bool值,指示数组是否包含不少于2个对象:-一个对象的字符串属性值等于"foo"-一个对象的字符串属性值等于"bar">

到目前为止,我只能用"丑陋"的方法来解决这个问题:

!myArr.filter{ $0.property  == "foo"}.isEmpty &&
!myArr.filter{ $0.property  == "bar"}.isEmpty

有更好的方法吗?

以下是Playground中使用该方法的简单代码:

struct Obj {
var foo: String
}
let arr = [Obj(foo: "foo"), Obj(foo: "bar"), Obj(foo: "zoo")]
let result = !arr.filter{ $0.foo  == "foo"}.isEmpty && !arr.filter{ $0.foo  == "bar"}.isEmpty
print(result)
(["foo", "bar"] as Set).isSubset( of: myArr.map(.property) )
(["foo", "bar"] as Set).isSubset( of: arr.map(.foo) )

@Larme是对的,如果考虑时间复杂性,filter的最坏/最佳情况是O(n(,而使用containsfirst可以小于O(n(,甚至O(1(

因此,对于这种情况,最好的选择是:

myArr.contains(where: {$0.propery == "foo"}) && myArr.contains(where: {$0.propery == "bar"})

((myArr.first(where: {$0.propery == "foo"}) != nil) && (myArr.first(where: {$0.propery == "bar"}) != nil)

最新更新