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

var myDict = [Int : [Int]]()

Массив в нем не инициализирован, поэтому каждый раз я должен сначала его проверять:

if (myDict[idx] == nil) {
    myDict[idx] = []
}

Как инициализировать его как пустой массив в объявлении MyDict?

0
Joe Huang 26 Фев 2016 в 06:51

3 ответа

Лучший ответ

Я думаю, вы могли неправильно понять что-то очень важное - давайте убедимся:

Принцип работы словаря заключается в том, чтобы иметь не один массив, а массив для каждого ключа .

Каждое значение idx, для которого вы запрашиваете массив, возвращает другой массив.

Вы не можете ожидать, что он вернет пустой массив - словарь предназначен для возврата значения nil для ключа, который не был установлен. Чтобы сделать то, что вы пытаетесь, вероятно, поможет следующее:

myDict[idx] = myDict[idx] ?? []
1
Jordan Smith 26 Фев 2016 в 04:47

Вот что делает словарь, если вы пытаетесь получить ключ, для которого нет значения. Вы можете создать подкласс Dictionary и переопределить функцию индекса, чтобы получить то, что вы хотите, например это. Или просто напишите расширение, или напишите определение оператора для использования другого символа.

«Вы также можете использовать синтаксис подстрочного индекса для извлечения значения из словаря для определенного ключа. Поскольку можно запросить ключ, для которого не существует значения, индекс словаря возвращает необязательное значение типа значения словаря. ”

Выдержка из: Apple Inc. «Язык программирования Swift (Swift 2.1)». iBooks. https://itunes.apple.com / cn / book / swift-programming-language / id881256329? l = ru & amp; mt = 11

0
Nick Allen 26 Фев 2016 в 04:34

Вы можете инициализировать его таким образом

myDict.forEach {
    (var dictElement) -> () in
    dictElement.1 = [Int]()
}
0
John Hascall 27 Фев 2016 в 17:55