Быстрый эквивалент Python-словаря Метод setdefault () - PullRequest
1 голос
/ 10 мая 2019

Метод setdefault() в словаре Python устанавливает значение ключа, если ключ отсутствует в словаре, и возвращает это значение. Ссылки .

Существует ли аналогичный метод для словаря Swift?

Я пробовал это:

var dic1 = ["a": 1]
let defVal = dic1["b", default: 2]
print(defVal) // prints 2
print(dic1) // prints ["a": 1]
// However, I need ["a": 1, "b": 2]

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Вот расширение с объявленным setDefault

extension Dictionary {
    mutating func setDefault(_ key: Key, value: Value) {
        if self[key] == nil {
           self[key] = value
        }
    }
}

Пример

var d1: [String: Int] = ["A": 4]
d1["C"] = 13
d1.setDefault("B", value: 42)

print(d1)

Выходы

["A": 4, "C":13, "B": 42]

0 голосов
/ 10 мая 2019

Если я правильно понял, что метод python делает со словарем, это:

dict[someKey] = dict[someKey] ?? defaultValue

Если значение, связанное с someKey, еще не существует, свяжите defaultValue с someKey.

Вы можете сделать это расширением:

extension Dictionary {
    subscript(default key: Key) -> Value? {
        get { return self[key] }
        set {
            self[key] = self[key] ?? newValue
        }
    }
}

// usage:
// someDict[default: someKey] = someValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...