У мене є простий словник, який визначається як:
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
Я знаю, що це може прийти дуже пізно, але це може виявитися корисним для когось. Отже, для швидкого додавання пар ключових значень до словників можна скористатися методом 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")
Результат-
▿ : 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)
Вихід буде подібний
["Ім'я": "Aloha", "user": "Aloha 2", "questions": "" Ти моя "?"]
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 }
Будь ласка, повідомте мене, якщо ви знайшли якісь проблеми у використанні вище синтаксису.
Швидке 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)