在Swift中过滤字典数组

7
我有一个字典数组的例子:
```html

我有一个字典数组的例子:

```
(
        {
        Email = "kate-bell@mac.com";
        Name = "Kate Bell";
        Number = "(555) 564-8583";
    },
        {
        Email = "d-higgins@mac.com";
        Name = "Daniel Higgins";
        Number = "555-478-7672";
    }
)

我想根据键“Name”筛选这个字典。

 func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    let predicate = NSPredicate(format:"Name == %@", searchText)
    let filteredArray = (arrContact as NSMutableArray).filteredArrayUsingPredicate(predicate)
    print(filteredArray)
    if(filteredArray.count == 0){
                searchActive = false;
            } else {
                searchActive = true;
            }
            tblData.reloadData()
 }

我总是从上面的Swift代码中得到空数组。请帮我解决这个问题。谢谢。

4个回答

16

我建议使用Swift的filter代替:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    let filteredArray = arrContact.filter { $0["Name"] == searchText }
    print(filteredArray)
    if filteredArray.isEmpty {
        searchActive = false
    } else {
        searchActive = true
    }
    tblData.reloadData()
}

正如@LeoDabus在评论中提到的那样,您甚至可以进一步简化:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    let filteredArray = arrContact.filter { $0["Name"] == searchText }
    print(filteredArray)
    searchActive = !filteredArray.isEmpty
    tblData.reloadData()
}

2
searchActive = !filteredArray.isEmpty - Leo Dabus

8
尝试这个,适用于Swift 3。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

    // Put your key in predicate that is "Name"
    let searchPredicate = NSPredicate(format: "Name CONTAINS[C] %@", searchText)
    let array = (arrContact as NSArray).filtered(using: searchPredicate)

    print ("array = \(array)")

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

@Abhishek Rathore,请告诉我如果你有任何问题。 - Museer Ahamad Ansari
那是一个非常棒的答案,即使我遇到了相同的问题,但是你的答案解决了我的难题。 - Mahesh Narla
在Swift 4中无法工作。请更新或添加Swift 4的支持。 - Parth

3

Swift

从模型类中获取项目/数组列表。

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if self.searchBarItems.text == "" {
        self.arrFilter = self.arrayDictionarySubModel
    } else {
        self.arrFilter.removeAll()
        let filteredArray = self.arrayDictionarySubModel.filter { ($0.itemTitle?.contains(self.searchBarItems.text ?? ""))!}
        print("filtered array:- ", filteredArray[0].itemTitle!)
        self.arrFilter = filteredArray
    }
    self.searchItemTableView.reloadData()
}

0

"name" 是键名

  var namePredicate = NSPredicate(format: "Name like %@",  String(searchText));
        let searchPredicate = NSPredicate(format: "Name CONTAINS[C] %@", searchText)
        arrrDict = self.arrrDict.filter { searchPredicate.evaluate(with: $0) };
       you will get the result in dictionary specialy made to get contats from the phone book

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接