为什么Swift不会将元素作为字典的值追加到数组中?

时间:2018-10-14 17:58:24

标签: arrays swift dictionary

我有字典:

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]]

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

1 个答案:

答案 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的值。