iOS Swift:将数组筛选为唯一项
我有一个如下所示的数组:iOS Swift:将数组筛选为唯一项,ios,arrays,swift,Ios,Arrays,Swift,我有一个如下所示的数组: let records = [ ["created": NSDate(timeIntervalSince1970: 1422600000), "type": 0], ["created": NSDate(timeIntervalSince1970: 1422600000), "type": 0], ["created": NSDate(timeIntervalSince1970: 1422600000), "type": 1], ["cr
let records = [
["created": NSDate(timeIntervalSince1970: 1422600000), "type": 0],
["created": NSDate(timeIntervalSince1970: 1422600000), "type": 0],
["created": NSDate(timeIntervalSince1970: 1422600000), "type": 1],
["created": NSDate(timeIntervalSince1970: 1422600000), "type": 1],
["created": NSDate(timeIntervalSince1970: 1422700000), "type": 2],
["created": NSDate(timeIntervalSince1970: 1422700000), "type": 2],
]
如何将数组筛选为仅具有唯一类型的记录?尝试:
var seenType:[Int:Bool] = [:]
let result = records.filter {
seenType.updateValue(false, forKey: $0["type"] as Int) ?? true
}
基本上,此代码是以下内容的快捷方式:
let result = records.filter { element in
let type = element["type"] as Int
// .updateValue(false, forKey:)
let retValue:Bool? = seenType[type]
seenType[type] = false
// ?? true
if retValue != nil {
return retValue!
}
else {
return true
}
}
Dictionary
的updateValue
如果键存在,则返回旧值;如果是新键,则返回nil
。必须有一种更快速的方法来实现这一点,但它是有效的
var unique = [Int: AnyObject]()
for record in records {
if let type = record["type"] as? Int {
unique[type] = record
}
}
您使用的是哪个版本的Swift?您需要解释答案。为什么这个代码可以工作等等…很好的一个。回答得好,优雅!(即使将
seenType[type]
设置为false
,如果已经看到了类型,这也是非常违反直觉的:)–使用Swift 1.2,您可能会使用设置用于seenType
。