Here is an extension that combines some of the previous answers and accepts all sequences, not just arrays.
public extension Dictionary { init<K: Sequence, V: Sequence>(keys: K, values: V) where K.Element == Key, V.Element == Value, K.Element: Hashable { self.init() for (key, value) in zip(keys, values) { self[key] = value } } }
This extension does not require the sequences to be the same length. If you want this, here is an extension with statements.
public extension Dictionary { init<K: Sequence, V: Sequence>(keys: K, values: V) where K.Element == Key, V.Element == Value, K.Element: Hashable { self.init() var keyIterator = keys.makeIterator() for value in values { let key = keyIterator.next() assert(key != nil, "The value sequence was longer.") self[key!] = value } assert(keyIterator.next() == nil, "The key sequence was longer.") } }
user7828620
source share