在字典数组中搜索

Ale*_*row 1 swift ios8

我正在尝试搜索从JSON获得的字典数组中的值.我有一个tableViewControllerUISearchResultsUpdating.我找到了一个包含字符串数组的示例:

    func updateSearchResultsForSearchController(searchController: UISearchController)
{
    filteredTableData.removeAll(keepCapacity: false)
    let searchPredicate = NSPredicate(format: "SELF contains[c] %@", searchController.searchBar.text)
    let array = tableData.filteredArrayUsingPredicate(searchPredicate)
    filteredTableData = array as! [String]

    self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)

我真的不知道如何在数组中进行搜索:

(
    {
    id = 3;
    name = TestNewYork;
    },
    {
    id = 2;
    name = TestLA;
    },
    {
    id = 1;
    name = TestWashington;
    }
)
Run Code Online (Sandbox Code Playgroud)

tableData = []filteredTableData必须是一个阵列

请帮忙!

Fog*_*ter 6

您可以使用简单的过滤功能来执行此操作...

tableData : [[String : String]] = ... // your JSON array of String, String dictionaries...

filteredTableData = tableData.filter{
    dictionary in
    return dictionary["name"] == filterString
}
Run Code Online (Sandbox Code Playgroud)

不管怎么说,还有一段时间不写Swift.

你也可以将它包装在一个函数中......

func filter(array : [[String : String]], byString filterString : String) -> [[String : String]] {
    return array.filter{
        dictionary in
        return dictionary["name"] == filterString
    }
}
Run Code Online (Sandbox Code Playgroud)

或者其他的东西.尚未检查代码.如果它不起作用将返回.

在游乐场检查,这工作......

在此输入图像描述

UPDATE

改成了......

let data = [
    [
        "id" : 3,
        "name" : "a"
    ],
    [
        "id" : 4,
        "name" : "b"
    ],
    [
        "id" : 5,
        "name" : "c"
    ]
]

let filteredData = data.filter{
    return $0["name"] == "b"
}
Run Code Online (Sandbox Code Playgroud)

它有效.只是无法弄清楚如何包装一个函数.

如果你想匹配单词的开头......

let data = [
    [
        "id" : 3,
        "name" : "Hello"
    ],
    [
        "id" : 4,
        "name" : "Goodbye"
    ],
    [
        "id" : 5,
        "name" : "Everybody"
    ]
]

let filteredData = data.filter{
    let string = $0["name"] as! String

    return string.hasPrefix("Goo")
}
Run Code Online (Sandbox Code Playgroud)

如果你想要一个包含,你只需要在字符串中进行查找.

再说一遍,我不是在这里.我在游乐场跑步检查......

对于包含搜索,您可以执行此操作...

let filteredData = data.filter{
    let string = $0["name"] as! String

    return string.rangeOfString("db") != nil
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述