Почему Swift не добавляет элемент в массив как значение словаря? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть словарь:

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 голосов
/ 14 октября 2018

Я считаю, что это то, что вы хотите, он использует 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 ,он разворачивает необязательный левый операнд, если он содержит значение, или возвращает значение по умолчанию (операнд справа), если a равно nil.

В вашем коде returnCarsNumbers[garage] = [card] заменяет весь массив на значения returnCarsNumbers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...