У меня есть простой словарь, который определяется как:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Теперь я хочу добавить элемент в этот словарь: 3 : "efg"
Как я могу добавить 3 : "efg"
в этот существующий словарь?
У меня есть простой словарь, который определяется как:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Теперь я хочу добавить элемент в этот словарь: 3 : "efg"
Как я могу добавить 3 : "efg"
в этот существующий словарь?
Ответы:
Вы используете NSDictionary
. Если вам по какой-то причине явно не нужен этот тип, я рекомендую использовать словарь Swift.
Вы можете передать словарь Swift любой функции, ожидающей NSDictionary
без какой-либо дополнительной работы, потому что Dictionary<>
и NSDictionary
без проблем соединитесь друг с другом. Преимущество родного способа Swift состоит в том, что в словаре используются универсальные типы, поэтому, если вы определите его Int
как ключ и String
как значение, вы не сможете по ошибке использовать ключи и значения разных типов. (Компилятор проверяет типы от вашего имени.)
Исходя из того, что я вижу в вашем коде, ваш словарь использует Int
в качестве ключа и String
в качестве значения. Чтобы создать экземпляр и добавить элемент позже, вы можете использовать этот код:
var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"
Если вам позже потребуется присвоить его переменной NSDictionary
типа, просто выполните явное приведение:
let nsDict = dict as! NSDictionary
И, как упоминалось ранее, если вы хотите передать его ожидающей функции NSDictionary
, передайте ее как есть без приведения или преобразования.
Dictionary
объектом, а затем преобразовывая его NSDictionary
в конец, если вам нужно. Чудесно. Спасибо.
Вы можете добавить, используя следующий способ и изменить Dictionary
наNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test"
.. Ошибкаfatal error: unexpectedly found nil while unwrapping an Optional value
Я знаю, что это может произойти очень поздно, но это может оказаться полезным для кого-то. Поэтому для добавления пар ключ-значение в словари в swift вы можете использовать метод updateValue (value:, forKey:) следующим образом:
var dict = [ 1 : "abc", 2 : "cde"]
dict.updateValue("efg", forKey: 3)
print(dict)
SWIFT 3 - XCODE 8.1
var dictionary = [Int:String]()
dictionary.updateValue(value: "Hola", forKey: 1)
dictionary.updateValue(value: "Hello", forKey: 2)
dictionary.updateValue(value: "Aloha", forKey: 3)
Итак, ваш словарь содержит:
словарь [1: Привет, 2: Привет, 3: Алоха]
dictionary[1] = "Hola"
?
Если ваш словарь Int
для String
вас, вы можете сделать просто:
dict[3] = "efg"
Если вы имеете в виду добавление элементов к значению словаря, возможное решение:
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
В Swift, если вы используете NSDictionary , вы можете использовать setValue
:
dict.setValue("value", forKey: "key")
Дано два словаря, как показано ниже:
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
Вот как вы можете добавить все элементы из dic2 в dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
Приветствия А.
.forEach
вместо, так .map
как нам не нужен какой-либо возвращаемый сопоставленный массив
Dict.updateValue
обновляет значение для существующего ключа из словаря или добавляет новую новую пару ключ-значение, если ключ не существует.
Пример-
var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")
result-
▿ : 2 elements
- key : "userId"
- value : 866
▿ : 2 elements
- key : "otherNotes"
- value : "Hello"
Для парней, использующих [String:Any]
вместо Dictionary
ниже расширение
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
Начиная с Swift 5 работает следующая коллекция кода.
// main dict to start with
var myDict : Dictionary = [ 1 : "abc", 2 : "cde"]
// dict(s) to be added to main dict
let myDictToMergeWith : Dictionary = [ 5 : "l m n"]
let myDictUpdated : Dictionary = [ 5 : "lmn"]
let myDictToBeMapped : Dictionary = [ 6 : "opq"]
myDict[3]="fgh"
myDict.updateValue("ijk", forKey: 4)
myDict.merge(myDictToMergeWith){(current, _) in current}
print(myDict)
myDict.merge(myDictUpdated){(_, new) in new}
print(myDict)
myDictToBeMapped.map {
myDict[$0.0] = $0.1
}
print(myDict)
Нет функции для добавления данных в словарь. Вы просто присваиваете значение новому ключу в существующем словаре. это автоматически добавит ценность словарю.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
Выход будет как
["Имя": "Алоха", "Пользователь": "Алоха 2", "Вопросы": "" Ты мой "?"]]
For whoever reading this for swift 5.1+
// 1. Using updateValue to update the given key or add new if doesn't exist
var dictionary = [Int:String]()
dictionary.updateValue("egf", forKey: 3)
// 2. Using a dictionary[key]
var dictionary = [Int:String]()
dictionary[key] = "value"
// 3. Using subscript and mutating append for the value
var dictionary = [Int:[String]]()
dictionary[key, default: ["val"]].append("value")
var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "sample@email.com"
print(dict)
До сих пор я нашел лучший способ добавить данные в словарь, используя одну из функций Swift более высокого порядка, то есть «уменьшить». Ниже приведен фрагмент кода:
newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }
@ Dharmesh В твоем случае это будет,
newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }
Пожалуйста, дайте мне знать, если вы обнаружите какие-либо проблемы в использовании вышеуказанного синтаксиса.
Swift 5 счастливое кодирование
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
Я добавил расширение словаря
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
вы можете использовать cloneWith
как это
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
если вы хотите изменить или обновить NSDictionary, то прежде всего введите его как NSMutableDictionary
let newdictionary = NSDictionary as NSMutableDictionary
тогда просто используйте
newdictionary.setValue(value: AnyObject?, forKey: String)