如何快速过滤具有多个键的nsdictionary?

时间:2019-03-15 10:46:22

标签: swift

{
    address = "street1";
    country = India;
    state = uttarpradesh;
}
{
    address = "street2";
    country = US;
    state = New York;
}

这是我的字典

我正在使用搜索栏作为过滤器

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

     // Put your key in predicate that is "Name"


    let filteredArray = MyDict.filter { ($0["address"] as! String).range(of: searchText!,  ($0["country"] as! String).range(of: searchText!, ($0["state"] as! String).range(of: searchText!, options: [.diacriticInsensitive, .caseInsensitive]) != nil }

    print ("array = \(filteredArray)")

    if(filteredArray.count == 0){
        searchActive = false;
    } else {
        searchActive = true;
    }
    self.TableView.reloadData()
}

2 个答案:

答案 0 :(得分:0)

代替这个

let filteredArray = MyDict.filter { ($0["address"] as! String).range(of: searchText!,  ($0["country"] as! String).range(of: searchText!, ($0["state"] as! String).range(of: searchText!, options: [.diacriticInsensitive, .caseInsensitive]) != nil }

使用&&要求两个布尔表达式为true,或者使用||来使表达式均为true。

因此,要检查县的地址OR(||)是否包含文本,请使用

let filteredArray = MyDict.filter { 
   ($0["address"] as! String).range(of: searchText!) != nil ||  
   ($0["country"] as! String).range(of: searchText!) != nil 
}

您可以添加具有更多||和子表达式的更多支票

但是,根据您显示的字典,我不清楚Country是字符串。您需要将其转换为字符串形式的国家名称。

答案 1 :(得分:0)

在您的示例中Number ob=new Number(10,20)假设是Number ob(10,20)的数组:

MyDict

另外,您可能会非常熟悉Swift guidelines的基础知识