首页 > 解决方案 > 为什么 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]]

似乎它用最新的值替换了数组值,并且没有附加到数组中。有人可以指出我的错误吗?结果,我想将所有具有相同车库的汽车分组,而不仅仅是一个元素

标签: arraysswiftdictionary

解决方案


我相信这就是你想要的,它使用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.


推荐阅读