How to append elements into a dictionary in Swift?

SwiftNsdictionary

Swift Problem Overview


I have a simple Dictionary which is defined like:

var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]

Now I want to add an element into this dictionary: 3 : "efg"

How can I append 3 : "efg" into this existing dictionary?

Swift Solutions


Solution 1 - Swift

You're using NSDictionary. Unless you explicitly need it to be that type for some reason, I recommend using a Swift dictionary.

You can pass a Swift dictionary to any function expecting NSDictionary without any extra work, because Dictionary<> and NSDictionary seamlessly bridge to each other. The advantage of the native Swift way is that the dictionary uses generic types, so if you define it with Int as the key and String as the value, you cannot mistakenly use keys and values of different types. (The compiler checks the types on your behalf.)

Based on what I see in your code, your dictionary uses Int as the key and String as the value. To create an instance and add an item at a later time you can use this code:

var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"

If you later need to assign it to a variable of NSDictionary type, just do an explicit cast:

let nsDict = dict as! NSDictionary

And, as mentioned earlier, if you want to pass it to a function expecting NSDictionary, pass it as-is without any cast or conversion.

Solution 2 - Swift

you can add using the following way and change Dictionary to NSMutableDictionary

dict["key"] = "value"

Solution 3 - Swift

I know this might be coming very late, but it may prove useful to someone. So for appending key value pairs to dictionaries in swift, you can use updateValue(value: , forKey: ) method as follows :

var dict = [ 1 : "abc", 2 : "cde"]
dict.updateValue("efg", forKey: 3)
print(dict)

Solution 4 - Swift

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)

So, your dictionary contains:

dictionary[1: Hola, 2: Hello, 3: Aloha]

Solution 5 - Swift

If your dictionary is Int to String you can do simply:

dict[3] = "efg"

If you mean adding elements to the value of the dictionary a possible solution:

var dict = Dictionary<String, Array<Int>>()

dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)

Solution 6 - Swift

Swift 3+

Example to assign new values to Dictionary. You need to declare it as NSMutableDictionary:

var myDictionary: NSMutableDictionary = [:]
let newValue = 1
myDictionary["newKey"] = newValue
print(myDictionary)

Solution 7 - Swift

In Swift, if you are using NSDictionary, you can use setValue:

dict.setValue("value", forKey: "key")

Solution 8 - Swift

Given two dictionaries as below:

var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]

Here is how you can add all the items from dic2 to dic1:

dic2.forEach {
   dic1[$0.key] = $0.value
}

Solution 9 - Swift

Dict.updateValue updates value for existing key from dictionary or adds new new key-value pair if key does not exists.

Example-

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"

Solution 10 - Swift

[String:Any]

For the fellows using [String:Any] instead of Dictionary below is the extension

extension Dictionary where Key == String, Value == Any {
    
    mutating func append(anotherDict:[String:Any]) {
        for (key, value) in anotherDict {
            self.updateValue(value, forKey: key)
        }
    }
}

Solution 11 - Swift

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")

Solution 12 - Swift

As of Swift 5, the following code collection works.

 // 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)

Solution 13 - Swift

There is no function to append the data in dictionary. You just assign the value against new key in existing dictionary. it will automatically add value to the dictionary.

var param  = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)

The output will be like

["Name":"Aloha","user" : "Aloha 2","questions" : ""Are you mine"?"]

Solution 14 - Swift

To add new elements just set:

listParameters["your parameter"] = value

Solution 15 - Swift

var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "sample@email.com"
print(dict)

Solution 16 - Swift

To append a new key-value pair to a dictionary you simply have to set the value for the key. for eg.

// Initialize the Dictionary
var dict = ["name": "John", "surname": "Doe"]
 
// Add a new key with a value

dict["email"] = "john.doe@email.com"

print(dict)

Output -> ["surname": "Doe", "name": "John", "email": "[email protected]"]

Solution 17 - Swift

Up till now the best way I have found to append data to a dictionary by using one of the higher order functions of Swift i.e. "reduce". Follow below code snippet:

newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }

@Dharmesh In your case, it will be,

newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }

Please let me know if you find any issues in using above syntax.

Solution 18 - Swift

Swift 5 happy coding

var tempDicData = NSMutableDictionary()
            
for temp in answerList {
    tempDicData.setValue("your value", forKey: "your key")
}

Solution 19 - Swift

I added Dictionary extension

extension Dictionary {   
  func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
    var result = self
    dict.forEach { key, value in result[key] = value }
    return result  
  }
}

you can use cloneWith like this

 newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }

Solution 20 - Swift

if you want to modify or update NSDictionary then first of all typecast it as NSMutableDictionary

let newdictionary = NSDictionary as NSMutableDictionary

then simply use

 newdictionary.setValue(value: AnyObject?, forKey: String)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDharmesh KheniView Question on Stackoverflow
Solution 1 - SwiftAntonioView Answer on Stackoverflow
Solution 2 - Swiftyashwanth77View Answer on Stackoverflow
Solution 3 - SwiftHeadOnnView Answer on Stackoverflow
Solution 4 - SwiftCristian MoraView Answer on Stackoverflow
Solution 5 - SwiftAlex GidanView Answer on Stackoverflow
Solution 6 - SwiftDasogaView Answer on Stackoverflow
Solution 7 - SwiftlojalsView Answer on Stackoverflow
Solution 8 - SwiftAmin TavassolianView Answer on Stackoverflow
Solution 9 - SwiftVarsha GaikwadView Answer on Stackoverflow
Solution 10 - SwiftDhaval H. NenaView Answer on Stackoverflow
Solution 11 - SwiftLalit YadavView Answer on Stackoverflow
Solution 12 - SwiftiPadawanView Answer on Stackoverflow
Solution 13 - SwiftTalha RasoolView Answer on Stackoverflow
Solution 14 - SwiftTung TranView Answer on Stackoverflow
Solution 15 - SwiftQueen SemiramisView Answer on Stackoverflow
Solution 16 - SwiftHarshit JainView Answer on Stackoverflow
Solution 17 - SwiftShobhit CView Answer on Stackoverflow
Solution 18 - SwiftShakeel AhmedView Answer on Stackoverflow
Solution 19 - SwiftjimiView Answer on Stackoverflow
Solution 20 - SwiftSonu VermaView Answer on Stackoverflow