iOS Swift:将数组过滤为唯一的项目
我有一个看起来像这样的数组:
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 } }