How do I create dictionary from array of tuples?
Swift 4
If your tuples is (Hashable, String) you can use:
let array = [("key1", "value1"), ("key2", "value2"), ("key3", "value3")]
let dictionary = array.reduce(into: [:]) { $0[$1.0] = $1.1 }
print(dictionary) // ["key1": "value1", "key2": "value2", "key3": "value3"]
Depending on what you want to do, you could:
let tuples = [(0, "0"), (1, "1"), (1, "2")]
var dictionary = [Int: String]()
Option 1: replace existing keys
tuples.forEach {
dictionary[$0.0] = $0.1
}
print(dictionary) //prints [0: "0", 1: "2"]
Option 2: Don't allow repeting keys
enum Errors: Error {
case DuplicatedKeyError
}
do {
try tuples.forEach {
guard dictionary.updateValue($0.1, forKey:$0.0) == nil else { throw Errors.DuplicatedKeyError }
}
print(dictionary)
} catch {
print("Error") // prints Error
}
Swift 4
For creation you can use native Dictionary's init functions:
Dictionary(uniqueKeysWithValues: [("a", 0), ("b", 1)])
// ["b": 1, "a": 0]
Dictionary(uniqueKeysWithValues: [("a", 0), ("b", 1), ("b", 2)])
// Fatal error: Duplicate values for key: 'b'
// takes the first match
Dictionary([("a", 0), ("b", 1), ("a", 2)], uniquingKeysWith: { old, _ in old })
// ["b": 1, "a": 0]
// takes the latest match
Dictionary([("a", 0), ("b", 1), ("a", 2)], uniquingKeysWith: { $1 })
// ["b": 1, "a": 2]
Also if you want to have the shortcut:
Dictionary([("a", 0), ("b", 1), ("a", 2)]) { $1 }
// ["b": 1, "a": 2]