Tengo un diccionario simple que se define como:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Ahora quiero agregar un elemento a este diccionario: 3 : "efg"
¿Cómo puedo agregar 3 : "efg"a este diccionario existente?
Tengo un diccionario simple que se define como:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Ahora quiero agregar un elemento a este diccionario: 3 : "efg"
¿Cómo puedo agregar 3 : "efg"a este diccionario existente?
Respuestas:
Usted está utilizando NSDictionary. A menos que explícitamente necesite que sea de ese tipo por alguna razón, le recomiendo usar un diccionario Swift.
Puede pasar un diccionario Swift a cualquier función que espera NSDictionarysin ningún trabajo adicional, porque Dictionary<>y NSDictionarysin problemas tender un puente entre sí. La ventaja de la forma nativa de Swift es que el diccionario usa tipos genéricos, por lo que si lo define con Intla clave y Stringel valor, no puede usar claves y valores por error. (El compilador verifica los tipos en su nombre).
Según lo que veo en su código, su diccionario lo utiliza Intcomo clave y Stringcomo valor. Para crear una instancia y agregar un elemento más adelante, puede usar este código:
var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"
Si más tarde necesita asignarlo a una variable de NSDictionarytipo, simplemente realice una conversión explícita:
let nsDict = dict as! NSDictionary
Y, como se mencionó anteriormente, si desea pasarlo a una función que espera NSDictionary, páselo como está sin ningún tipo de conversión o conversión.
Dictionaryobjeto y luego convertirlo al NSDictionaryfinal si es necesario. Maravilloso. Gracias.
puede agregar usando la siguiente manera y cambiar DictionaryaNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test".. Errorfatal error: unexpectedly found nil while unwrapping an Optional value
Sé que esto podría llegar muy tarde, pero puede resultar útil para alguien. Entonces, para agregar pares de valores clave a los diccionarios en swift, puede usar el método updateValue (value:, forKey:) de la siguiente manera:
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)
Entonces, tu diccionario contiene:
diccionario [1: Hola, 2: Hola, 3: Aloha]
dictionary[1] = "Hola"?
Si su diccionario es Intpara Stringusted, puede hacer simplemente:
dict[3] = "efg"
Si te refieres a agregar elementos al valor del diccionario, una posible solución:
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
En Swift, si está usando NSDictionary , puede usar setValue:
dict.setValue("value", forKey: "key")
Dados dos diccionarios como a continuación:
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
Así es como puede agregar todos los elementos de dic2 a dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
Saludos A.
.forEachlugar de .mapya que no necesitamos ningún arreglo mapeado de retorno
Dict.updateValue actualiza el valor de la clave existente del diccionario o agrega un nuevo par clave-valor nuevo si la clave no existe.
Ejemplo-
var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")
Resultado-
▿ : 2 elements
- key : "userId"
- value : 866
▿ : 2 elements
- key : "otherNotes"
- value : "Hello"
Para los becarios que usan en [String:Any]lugar de a Dictionarycontinuación es la extensión
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
A partir de Swift 5, funciona la siguiente colección de códigos.
// 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)
No hay función para agregar los datos en el diccionario. Simplemente asigna el valor a la nueva clave en el diccionario existente. automáticamente agregará valor al diccionario.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
La salida será como
["Nombre": "Aloha", "usuario": "Aloha 2", "preguntas": "" ¿Eres mío "?"]
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)
Hasta ahora, la mejor manera que he encontrado para agregar datos a un diccionario mediante el uso de una de las funciones de orden superior de Swift, es decir, "reducir". Siga el fragmento de código a continuación:
newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }
@ Dharmesh En su caso, será,
newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }
Avíseme si encuentra algún problema al usar la sintaxis anterior.
Swift 5 feliz codificación
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
Agregué la extensión del diccionario
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
puedes usar cloneWithasí
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
si desea modificar o actualizar NSDictionary, primero escriba todo como NSMutableDictionary
let newdictionary = NSDictionary as NSMutableDictionary
entonces simplemente use
newdictionary.setValue(value: AnyObject?, forKey: String)