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 NSDictionary
sin ningún trabajo adicional, porque Dictionary<>
y NSDictionary
sin 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 Int
la clave y String
el 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 Int
como clave y String
como 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 NSDictionary
tipo, 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.
Dictionary
objeto y luego convertirlo al NSDictionary
final si es necesario. Maravilloso. Gracias.
puede agregar usando la siguiente manera y cambiar Dictionary
aNSMutableDictionary
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 Int
para String
usted, 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.
.forEach
lugar de .map
ya 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 Dictionary
continuació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 cloneWith
así
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)