Swift - Diccionarios

Rápido 4 dictionariesse utilizan para almacenar listas desordenadas de valores del mismo tipo. Swift 4 pone un control estricto que no le permite ingresar un tipo incorrecto en un diccionario, incluso por error.

Los diccionarios Swift 4 utilizan un identificador único conocido como keypara almacenar un valor que luego se puede referenciar y buscar a través de la misma clave. A diferencia de los elementos de una matriz, los elementos de unadictionaryno tiene un pedido específico. Puedes usar undictionary cuando necesite buscar valores basados ​​en sus identificadores.

Una clave de diccionario puede ser un número entero o una cadena sin restricción, pero debe ser única dentro de un diccionario.

Si asigna un diccionario creado a una variable, siempre será mutable, lo que significa que puede cambiarlo agregando, quitando o cambiando sus elementos. Pero si asigna un diccionario a una constante, ese diccionario es inmutable y su tamaño y contenido no se pueden cambiar.

Crear diccionario

Puede crear un diccionario vacío de un cierto tipo utilizando la siguiente sintaxis de inicializador:

var someDict = [KeyType: ValueType]()

Puede usar la siguiente sintaxis simple para crear un diccionario vacío cuya clave será de tipo Int y los valores asociados serán cadenas:

var someDict = [Int: String]()

Aquí hay un ejemplo para crear un diccionario a partir de un conjunto de valores dados:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

Inicialización basada en secuencia

Swift 4 le permite crear diccionarios a partir de matrices (pares clave-valor).

var cities = [“Delhi”,”Bangalore”,”Hyderabad”]

Puede usar la siguiente sintaxis simple para crear un diccionario vacío cuya clave será de tipo Int y los valores asociados serán cadenas:

var Distance = [2000,10, 620]

Aquí hay un ejemplo para crear un diccionario a partir de un conjunto de valores dados:

let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, Distance))

Las líneas de código anteriores crearán un diccionario con Ciudades como clave y Distancia como Valor -

Filtración

Swift 4 le permite filtrar valores de un diccionario.

var closeCities = cityDistanceDict.filter { $0.value < 1000 }

Si ejecutamos el código anterior, nuestro diccionario closeCities será.

["Bangalore" : 10 , "Hyderabad" : 620]

Agrupación de diccionario

Swift 4 le permite crear agrupaciones de valores de diccionario.

var cities = ["Delhi","Bangalore","Hyderabad","Dehradun","Bihar"]

Puede utilizar la siguiente sintaxis simple para agrupar los valores del diccionario según el primer alfabeto.

var GroupedCities = Dictionary(grouping: cities ) { $0.first! }

El resultado del código anterior será

["D" :["Delhi","Dehradun"], "B" : ["Bengaluru","Bihar"], "H" : ["Hyderabad"]]

Acceder a diccionarios

Puede recuperar un valor de un diccionario utilizando la sintaxis de subíndice, pasando la clave del valor que desea recuperar entre corchetes inmediatamente después del nombre del diccionario de la siguiente manera:

var someVar = someDict[key]

Veamos el siguiente ejemplo para crear, inicializar y acceder a valores desde un diccionario:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someVar = someDict[1]

print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Value of key = 1 is Optional("One")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Modificar diccionarios

Puedes usar updateValue(forKey:)método para agregar un valor existente a una clave dada del diccionario. Este método devuelve un valor opcional del tipo de valor del diccionario. Aquí hay un ejemplo simple:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict.updateValue("New value of one", forKey: 1)
var someVar = someDict[1]

print( "Old value of key = 1 is \(oldVal)" )
print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Old value of key = 1 is Optional("One")
Value of key = 1 is Optional("New value of one")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Puede modificar un elemento existente de un diccionario asignando un nuevo valor a una clave determinada, como se muestra en el siguiente ejemplo:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict[1]
someDict[1] = "New value of one"
var someVar = someDict[1]

print( "Old value of key = 1 is \(oldVal)" )
print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Old value of key = 1 is Optional("One")
Value of key = 1 is Optional("New value of one")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Eliminar pares clave-valor

Puedes usar removeValueForKey()método para eliminar un par clave-valor de un diccionario. Este método elimina el par clave-valor si existe y devuelve el valor eliminado, o devuelve nil si no existía ningún valor. Aquí hay un ejemplo simple:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var removedValue = someDict.removeValue(forKey: 2)

print( "Value of key = 1 is \(someDict[1])" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")

También puede usar la sintaxis de subíndice para eliminar un par clave-valor de un diccionario asignando un valor de nilpara esa llave. Aquí hay un ejemplo simple:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

someDict[2] = nil

print( "Value of key = 1 is \(someDict[1])" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")

Iterando sobre un diccionario

Puedes usar un for-in bucle para iterar sobre todo el conjunto de pares clave-valor en un diccionario, como se muestra en el siguiente ejemplo:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

for (index, keyValue) in someDict.enumerated() {
   print("Dictionary key \(index) - Dictionary value \(keyValue)")
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Dictionary key 2 - Dictionary value Two
Dictionary key 3 - Dictionary value Three
Dictionary key 1 - Dictionary value One

Puedes usar enumerate() función que devuelve el índice del elemento junto con su par (clave, valor) como se muestra a continuación en el ejemplo:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict.enumerated() {
   print("Dictionary key \(key) - Dictionary value \(value)")
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Dictionary key 0 - Dictionary value (key: 2, value: "Two")
Dictionary key 1 - Dictionary value (key: 3, value: "Three")
Dictionary key 2 - Dictionary value (key: 1, value: "One")

Convertir a matrices

Puede extraer una lista de pares clave-valor de un diccionario determinado para crear matrices separadas para claves y valores. Aquí hay un ejemplo:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)

print("Print Dictionary Keys")

for (key) in dictKeys {
   print("\(key)")
}
print("Print Dictionary Values")

for (value) in dictValues {
   print("\(value)")
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Print Dictionary Keys
2
3
1
Print Dictionary Values
Two
Three
One

La propiedad del recuento

Puede utilizar el modo de solo lectura count propiedad de un diccionario para averiguar el número de elementos en un diccionario como se muestra a continuación:

var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]

print("Total items in someDict1 = \(someDict1.count)")
print("Total items in someDict2 = \(someDict2.count)")

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Total items in someDict1 = 3
Total items in someDict2 = 2

La propiedad vacía

Puedes usar solo lectura empty propiedad de un diccionario para averiguar si un diccionario está vacío o no, como se muestra a continuación:

var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]
var someDict3:[Int:String] = [Int:String]()

print("someDict1 = \(someDict1.isEmpty)")
print("someDict2 = \(someDict2.isEmpty)")
print("someDict3 = \(someDict3.isEmpty)")

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

someDict1 = false
someDict2 = false
someDict3 = true