ios - NSPredicate 通过字典过滤并保留键

标签 ios swift

let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let array = (Array(MyVariables.dictionary.values) as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.searchArray = array as! [String]

我想以某种方式将字典键附加到过滤后的字典值上?我上面的代码创建了一个新数组,其中仅包含过滤后的值而不是键

最佳答案

你可以避免使用 NSPredicate 并尝试使用 filter 函数,假设你有一个字典 [String:String] 像以下示例中那样声明:

let dict = ["key1": "a", "key2": "ab", "key3": "ac", "hello": "d"]

然后你就可以使用filter 函数,像下面这样使用简短的闭包语法:

// the $0.1 mean the value of the dictionary, if you want to refer to the key you need to use $0.0 instead
var result = dict.filter { $0.1.containsString("a") } 

或者只是以更大的方式但在某些方面更易于理解:

var result = dict.filter { (key, value) -> Bool in
    return value.containsString("a")
}

以上两段代码返回一个包含字典的键和值的数组:

[("key1", "a"), ("key2", "ab"), ("key3", "ac")]

您只需要使用您的 searchController.searchBar.text! 和您需要的其他东西来调整上面的代码。

希望对你有帮助

关于ios - NSPredicate 通过字典过滤并保留键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34678641/

相关文章:

ios - 在调用初始 ViewController ViewDidLoad 时,CoreData 和 NSUserDefaults 会一直加载吗?

swift - 如何使用 swift 通过 wss 连接到 MQTT?

swift - 在运行时检查协议(protocol)继承

iOS 共享扩展激活规则在不应用于 public.url 类型时触发

ios - 使用配置文件从终端问题构建 .ipa

ios - 根据用户身份验证状态在启动时设置 Root View Controller

iphone - 更改 iPhone 启动画面时间

ios - swift:下载百分比

ios - 我可以向 UIAlertController 添加开关吗?

ios - 图表库中的编译时错误