Dictionaries
Remarks#
Some examples in this topic might have a different order when used because dictionary order is not guaranteed.
Declaring Dictionaries
Dictionaries are an unordered collection of keys and values. Values relate to unique keys and must be of the same type.
When initializing a Dictionary the full syntax is as follows:
var books : Dictionary<Int, String> = Dictionary<Int, String>()
Although a more concise way of initializing:
var books = [Int: String]()
// or
var books: [Int: String] = [:]
Declare a dictionary with keys and values by specifying them in a comma separated list. The types can be inferred from the types of keys and values.
var books: [Int: String] = [1: "Book 1", 2: "Book 2"]
//books = [2: "Book 2", 1: "Book 1"]
var otherBooks = [3: "Book 3", 4: "Book 4"]
//otherBooks = [3: "Book 3", 4: "Book 4"]
Modifying Dictionaries
Add a key and value to a Dictionary
var books = [Int: String]()
//books = [:]
books[5] = "Book 5"
//books = [5: "Book 5"]
books.updateValue("Book 6", forKey: 5)
//[5: "Book 6"]
updateValue returns the original value if one exists or nil.
let previousValue = books.updateValue("Book 7", forKey: 5)
//books = [5: "Book 7"]
//previousValue = "Book 6"
Remove value and their keys with similar syntax
books[5] = nil
//books [:]
books[6] = "Deleting from Dictionaries"
//books = [6: "Deleting from Dictionaries"]
let removedBook = books.removeValueForKey(6)
//books = [:]
//removedValue = "Deleting from Dictionaries"
Accessing Values
A value in a Dictionary
can be accessed using its key:
var books: [Int: String] = [1: "Book 1", 2: "Book 2"]
let bookName = books[1]
//bookName = "Book 1"
The values of a dictionary can be iterated through using the values
property:
for book in books.values {
print("Book Title: \(book)")
}
//output: Book Title: Book 2
//output: Book Title: Book 1
Similarly, the keys of a dictionary can be iterated through using its keys
property:
for bookNumbers in books.keys {
print("Book number: \(bookNumber)")
}
// outputs:
// Book number: 1
// Book number: 2
To get all key
and value
pair corresponding to each other (you will not get in proper order since it is a Dictionary)
for (book,bookNumbers)in books{
print("\(book) \(bookNumbers)")
}
// outputs:
// 2 Book 2
// 1 Book 1
Note that a Dictionary
, unlike an Array
, in inherently unordered-that is, there is no guarantee on the order during iteration.
If you want to access multiple levels of a Dictionary use a repeated subscript syntax.
// Create a multilevel dictionary.
var myDictionary: [String:[Int:String]]! = ["Toys":[1:"Car",2:"Truck"],"Interests":[1:"Science",2:"Math"]]
print(myDictionary["Toys"][2]) // Outputs "Truck"
print(myDictionary["Interests"][1]) // Outputs "Science"
Change Value of Dictionary using Key
var dict = ["name": "John", "surname": "Doe"]
// Set the element with key: 'name' to 'Jane'
dict["name"] = "Jane"
print(dict)
Get all keys in Dictionary
let myAllKeys = ["name" : "Kirit" , "surname" : "Modi"]
let allKeys = Array(myAllKeys.keys)
print(allKeys)
Merge two dictionaries
extension Dictionary {
func merge(dict: Dictionary<Key,Value>) -> Dictionary<Key,Value> {
var mutableCopy = self
for (key, value) in dict {
// If both dictionaries have a value for same key, the value of the other dictionary is used.
mutableCopy[key] = value
}
return mutableCopy
}
}