我有字典:
var returnCarsNumbers = [Int32: [Int32]]()
,从CoreData提取后,我有了下一个值:
let carsNumbers = try context.fetch(request) as! [NSDictionary]
结果看起来像(一个对象的样本):
Optional<NSDictionary>
▿ some : 2 elements
▿ 0 : 2 elements
- key : carNbr
- value : 2747543
▿ 1 : 2 elements
- key : garageNbr
- value : 40510
现在我正在尝试将那些元素添加到字典中:
_ = carsNumbers.map {
let garage = $0.value(forKey: "garageNbr") as! Int32
let car = $0.value(forKey: "carNbr") as! Int32
returnCarsNumbers[garage] = [card]
}
但是当我最后打印returnCarsNumbers
时,我只有很少的元素
[117547: [8808224], 922223: [68015677], 21125: [902403], 36247: [2480974], 252983: [20682146], 902497: [66283014], 40510: [2747408], 271520: [22482094]]
似乎它用最新值替换了数组值,并且没有追加到数组中。 有人可以指出我的错误吗? 结果,我希望将所有具有相同车库的汽车归为一组,而不只是一个元素
答案 0 :(得分:0)
我相信这就是您想要的,它使用forEach(_:):
carsNumbers.forEach {
let garage = $0.value(forKey: "garageNbr") as! Int32
let car = $0.value(forKey: "carNbr") as! Int32
returnCarsNumbers[garage] = (returnCarsNumbers[garage] ?? []) + [card]
}
??
是Nil-Coalescing Operator,如果它包含一个值,它将解开可选的左侧操作数,或者如果a为零,则返回默认值(右侧的操作数)。
在您的代码returnCarsNumbers[garage] = [card]
中,将整个数组替换为returnCarsNumbers
的值。