Dictionary 快速字典过滤器
因此,Swift 2.x字典上的filter函数似乎返回一个元组数组。我的问题是,有没有一个优雅的办法可以把它重新编入字典?提前谢谢Dictionary 快速字典过滤器,dictionary,filter,swift2,tuples,Dictionary,Filter,Swift2,Tuples,因此,Swift 2.x字典上的filter函数似乎返回一个元组数组。我的问题是,有没有一个优雅的办法可以把它重新编入字典?提前谢谢 let dictionary: [String: String] = [ "key1": "value1", "key2": "value2", "key3": "value3" ] let newTupleArray: [(String, String)] = dictionary.filter { (tuple: (key: Stri
let dictionary: [String: String] = [
"key1": "value1",
"key2": "value2",
"key3": "value3"
]
let newTupleArray: [(String, String)] = dictionary.filter { (tuple: (key: String, value: String)) -> Bool in
return tuple.key != "key2"
}
let newDictionary: [String: String] = Dictionary(dictionaryLiteral: newTupleArray) // Error: cannot convert value of type '[(String, String)]' to expected argument type '[(_, _)]'
您可以扩展字典,使其以元组序列作为初始值:
extension Dictionary {
public init<S: SequenceType where S.Generator.Element == (Key, Value)>(_ seq: S) {
self.init()
for (k, v) in seq { self[k] = v }
}
}
如果您正在寻找更实用的方法:
let result = dictionary.filter {
$0.0 != "key2"
}
.reduce([String: String]()) { (var aggregate, elem) in
aggregate[elem.0] = elem.1
return aggregate
}
reduce-here用于从过滤后的元组构造新字典
编辑:由于var参数在Swift 2.2中已被弃用,您需要创建聚合的本地可变副本:
可能与swift 2.2弃用var参数的版本重复:您仍然可以使用reduce构建字典吗?@laz74感谢弃用说明。斯威夫特的变化如此之快和戏剧性。有关符合Swift 2.2标准的代码,请参见我编辑的答案
let result = dictionary.filter {
$0.0 != "key2"
}
.reduce([String: String]()) { (var aggregate, elem) in
aggregate[elem.0] = elem.1
return aggregate
}
let result = dictionary.filter {
$0.0 != "key2"
}
.reduce([String: String]()) { aggregate, elem in
var newAggregate = aggregate
newAggregate[elem.0] = elem.1
return newAggregate
}