过滤对象数组中的两个值
Filter two values in array of objects
我有一个对象数组,我想按两个条件过滤它们,要么对象在某个组中,要么它有特定名称,但我无法弄清楚为什么它不起作用。
这是我的代码:
let outputfiler = array.filter({[=10=].group.contains (where: {[=10=] == "groupBig" }) } || .name.contains(where: { == "Eis"}) )
这是我得到的错误:
Anonymous closure argument not contained in a closure
编辑:
组是一个数组,
名称只是一个字符串。
我也试过这个:
outputfiler = array.filter{[=11=].group.contains (where: {[=11=] == "groupBig" }) || [=11=].name(where: {[=11=] == "Eis"}) }
但是我得到这个错误:
Extraneous argument label 'where:' in call
您需要如下过滤器(为清楚起见显示在多行中):
let outputfiler = array.filter({
[=10=].group.contains(where: { [=10=] == "groupBig" }) ||
[=10=].name.contains("Eis")
})
您在 ||
之前关闭了过滤器 }
。假设 name
是一个 String
,contains
只需要搜索字符串,而不是闭包。
此语法应该有效。
let outputfiler = array.filter{[=10=].group.contains("groupBig") || [=10=].name.contains("Eis")}
这是我在 Swift 5(示例)中的解决方案:
我的结构(我使用这个结构从 Firebase 中提取数据):
struct User {
let uid:String
let phoneNumber:String
let username:String
let email:String
init(uid:String, dictionary: [String: Any]) {
self.uid = uid
self.username = dictionary["username"] as? String ?? String()
self.phoneNumber = dictionary["phoneNumber"] as? String ?? String()
self.email = dictionary["email"] as? String ?? String()
}
}
过滤器:
let arrayFiltered = self.arrayUsers.filter { (user) -> Bool in
return user.username.lowercased().contains("Dani".lowercased()) ||
user.email.lowercased().contains("DanielXXXX@gmail.com".lowercased()) ||
user.phoneNumber.lowercased().contains("+34111223344".lowercased())
}
祝你有美好的一天♥️。
我有一个对象数组,我想按两个条件过滤它们,要么对象在某个组中,要么它有特定名称,但我无法弄清楚为什么它不起作用。
这是我的代码:
let outputfiler = array.filter({[=10=].group.contains (where: {[=10=] == "groupBig" }) } || .name.contains(where: { == "Eis"}) )
这是我得到的错误:
Anonymous closure argument not contained in a closure
编辑: 组是一个数组, 名称只是一个字符串。
我也试过这个:
outputfiler = array.filter{[=11=].group.contains (where: {[=11=] == "groupBig" }) || [=11=].name(where: {[=11=] == "Eis"}) }
但是我得到这个错误:
Extraneous argument label 'where:' in call
您需要如下过滤器(为清楚起见显示在多行中):
let outputfiler = array.filter({
[=10=].group.contains(where: { [=10=] == "groupBig" }) ||
[=10=].name.contains("Eis")
})
您在 ||
之前关闭了过滤器 }
。假设 name
是一个 String
,contains
只需要搜索字符串,而不是闭包。
此语法应该有效。
let outputfiler = array.filter{[=10=].group.contains("groupBig") || [=10=].name.contains("Eis")}
这是我在 Swift 5(示例)中的解决方案:
我的结构(我使用这个结构从 Firebase 中提取数据):
struct User {
let uid:String
let phoneNumber:String
let username:String
let email:String
init(uid:String, dictionary: [String: Any]) {
self.uid = uid
self.username = dictionary["username"] as? String ?? String()
self.phoneNumber = dictionary["phoneNumber"] as? String ?? String()
self.email = dictionary["email"] as? String ?? String()
}
}
过滤器:
let arrayFiltered = self.arrayUsers.filter { (user) -> Bool in
return user.username.lowercased().contains("Dani".lowercased()) ||
user.email.lowercased().contains("DanielXXXX@gmail.com".lowercased()) ||
user.phoneNumber.lowercased().contains("+34111223344".lowercased())
}
祝你有美好的一天♥️。