¿Cómo puedo unir dos matrices en un dictionary?

Tengo 2 matrices:

var identic = [String]() var linef = [String]() 

Los he anexado con datos. Ahora, con fines de usabilidad, mi objective es combinarlos todos en un dictionary con la siguiente estructura

 FullStack = ["identic 1st value":"linef first value", "identic 2nd value":"linef 2nd value"] 

He estado navegando por la networking y no pude encontrar una solución viable para esto.

Cualquier idea es muy apreciada.

¡Gracias!

¡Esto parece un trabajo para .enumerate() !

 var arrayOne: [String] = [] var arrayTwo: [String] = [] var dictionary: [String: String] = [:] for (index, element) in arrayOne.enumerate() { dictionary[element] = arrayTwo[index] } 

Sin embargo, si desea el enfoque profesional , use una extensión:

 extension Dictionary { public init(keys: [Key], values: [Value]) { precondition(keys.count == values.count) self.init() for (index, key) in keys.enumerate() { self[key] = values[index] } } } 

Un método ligeramente diferente, que no requiere que las matrices tengan la misma longitud, ya que la function zip lo manejará con security.

 extension Dictionary { init(keys: [Key], values: [Value]) { self.init() for (key, value) in zip(keys, values) { self[key] = value } } } 

Si desea ser más seguro y asegurarse de elegir cada vez el recuento de matriz más pequeño (para que no pueda estrellarse si la segunda matriz es más pequeña que la primera), haga algo como:

 var identic = ["A", "B", "C", "D"] var linef = ["1", "2", "3"] var Fullstack = [String: String]() for i in 0..<min(linef.count, identic.count) { Fullstack[identic[i]] = linef[i] } print(Fullstack) // "[A: 1, B: 2, C: 3]" 

Esta es una solución genérica.

 func dictionaryFromKeysAndValues<K : Hashable, V>(keys:[K], values:[V]) -> Dictionary<K, V> { assert((count(keys) == count(values)), "number of elements odd") var result = Dictionary<K, V>() for i in 0..<count(keys) { result[keys[i]] = values[i] } return result } var identic = ["identic 1st value", "identic 2nd value", "identic 3rd value"] var linef = ["linef 1st value", "linef 2nd value", "linef 3rd value"] let mergedDictionary = dictionaryFromKeysAndValues(identic, linef) 

Aquí hay una extensión que combina algunas de las respuestas anteriores y acepta todas las secuencias, no solo las matrices.

 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 } } } 

Esa extensión no requiere que las secuencias tengan las mismas longitudes. Si quieres eso, aquí hay una extensión con aserciones.

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