过滤对象数组中的两个值

时间:2018-01-25 17:57:34

标签: arrays swift filter contains

我有一个对象数组,我希望通过两个条件对它们进行过滤,如果对象在某个特定的组中,或者它有一个特定的名称,但我无法弄清楚它为什么不起作用。

这是我的代码:

let outputfiler = array.filter({$0.group.contains (where: {$0 == "groupBig" }) } || $1.name.contains(where: {$1 == "Eis"})  )

这是我得到的错误:

  

匿名闭包参数未包含在闭包

编辑: 集团是一系列的trings, 只是一个字符串。

我也试过这个:

outputfiler = array.filter{$0.group.contains (where: {$0 == "groupBig" }) || $0.name(where: {$0 == "Eis"}) }

但后来我收到了这个错误:

Extraneous argument label 'where:' in call

3 个答案:

答案 0 :(得分:4)

您需要如下过滤器(为清晰起见,在多行显示):

df

Code                          ABCD GFHTI
Time                                    
20100101_00:01:33.436-92.451    24  None
20100101_00:01:33.638-92.651  None    25

您的过滤器在let outputfiler = array.filter({ $0.group.contains(where: { $0 == "groupBig" }) || $0.name.contains("Eis") }) 之前已关闭}。假设||nameString只需要搜索字符串,而不是闭包。

答案 1 :(得分:1)

此语法应该有效。

let outputfiler = array.filter{$0.group.contains("groupBig") || $0.name.contains("Eis")}

答案 2 :(得分:0)

这是我在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())

}

祝你有美好的一天♥️。