arrays - 为什么 Swift 不将元素作为字典的值附加到数组中?
问题描述
我有一本字典:
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]]
似乎它用最新的值替换了数组值,并且没有附加到数组中。有人可以指出我的错误吗?结果,我想将所有具有相同车库的汽车分组,而不仅仅是一个元素
解决方案
我相信这就是你想要的,它使用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 是 nil,它会返回一个默认值(右边的操作数)。
在您的代码returnCarsNumbers[garage] = [card]
中,将整个数组替换为returnCarsNumbers
.
推荐阅读
- python - 如何自动化 AWS s3 存储桶对象的权限
- foreign-keys - Symfony4:具有外键和截断/重置自动增量值的 DataFixtures
- azure-iot-hub - Azure IOT SDK C# GroupCertificateVerification 不起作用?
- r - R optim() L-BFGS-B 需要 'fn' 的有限值
- c# - C# webclient 或 webbrowser
- java - 使用改造上传图片
- maven - mvn clean compile assembly:single 工作,但 mvn install 或 package 无法创建具有依赖项的 jar
- sql-server - 如何在 SQL Server 报表生成器中添加“全选”选项而不选中“允许多个值”?
- runtime-error - 隐藏错误信息
- sql - 将查询保存在 iq 的临时表中