作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试快速过滤字典:
var data: [String: String] = [:]
data = data.filter { $0.1 == "Test" }
上面的过滤器代码在 Swift 2 下编译但产生以下错误:
Cannot assign a value of type '[(String, String)]' to a value of type '[String : String]'
这是 Swift 编译器中的错误还是这不是在 Swift 中过滤字典的正确方法?
最佳答案
这已在 Swift 4 中修复
let data = ["a": 0, "b": 42]
let filtered = data.filter { $0.value > 10 }
print(filtered) // ["b": 42]
在 Swift 4 中,过滤后的字典返回一个字典。
Swift 2 和 3 的原始答案
问题是 data
是一个字典,而 filter
的结果是一个数组,所以报错说你不能给后者的结果赋值前者。
您可以为结果数组创建一个新的变量/常量:
let data: [String: String] = [:]
let filtered = data.filter { $0.1 == "Test" }
这里 filtered
是一个元组数组:[(String, String)]
。
过滤后,如果需要,您可以重新创建一个新词典:
var newData = [String:String]()
for result in filtered {
newData[result.0] = result.1
}
如果您决定不使用filter
,您可以改变您的原始字典或其副本:
var data = ["a":"Test", "b":"nope"]
for (key, value) in data {
if value != "Test" {
data.removeValueForKey(key)
}
}
print(data) // ["a": "Test"]
注意:在 Swift 3 中,removeValueForKey
已重命名为 removeValue(forKey:)
,因此在此示例中它变为 data.removeValue(forKey : 键)
。
关于ios - Swift 过滤器字典错误 : Cannot assign a value of type '[(_, _)]' to a value of type '[_ : _]' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604897/
我是一名优秀的程序员,十分优秀!