Diccionario Swift
Un diccionario Swift se usa para almacenar una colección desordenada de datos del mismo tipo. El diccionario Swift fuerza la verificación del tipo de los elementos; si los tipos son diferentes, se producirá un error.
En un diccionario Swift, cada valor (value) está asociado con una clave (key) única, y la clave actúa como identificador del dato de ese valor en el diccionario.
A diferencia de los elementos de un array, los elementos de un diccionario no tienen un orden específico. Usamos un diccionario cuando necesitamos acceder a los datos mediante un identificador (clave), un método muy similar a la forma en que usamos un diccionario en el mundo real para buscar el significado de una palabra.
La clave de un diccionario Swift no tiene restricciones de tipo, puede ser entera o cadena, pero debe ser única.
Si se crea un diccionario y se asigna a una variable, el diccionario creado es modificable. Esto significa que después de crear el diccionario, se pueden cambiar sus elementos añadiendo, eliminando o modificando. Si se asigna un diccionario a una constante, el diccionario no es modificable, y tanto su tamaño como su contenido no se pueden cambiar.
Crear diccionario
Podemos usar la siguiente sintaxis para crear un diccionario vacío de un tipo específico:
var someDict = [KeyType: ValueType]()
A continuación se muestra la sintaxis simple para crear un diccionario vacío con claves de tipo Int y valores de tipo String:
var someDict = [Int: String]()
El siguiente es un ejemplo de creación de un diccionario:
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
Acceder al diccionario
Podemos acceder a los elementos del diccionario mediante la clave, la sintaxis es la siguiente:
var someVar = someDict[key]
Podemos aprender a crear, inicializar y acceder a un diccionario mediante el siguiente ejemplo:
import Cocoa var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"] var someVar = someDict[1] print( "key = 1 的值为 \(someVar)" ) print( "key = 2 的值为 \(someDict[2])" ) print( "key = 3 的值为 \(someDict[3])" )
El resultado de ejecutar el programa anterior es:
key = 1 的值为 Optional("One")
key = 2 的值为 Optional("Two")
key = 3 的值为 Optional("Three")
Modificar diccionario
Podemos usarupdateValue(forKey:)para agregar o actualizar el contenido del diccionario. Si la clave no existe, se agrega el valor; si existe, se modifica el valor correspondiente. El método updateValue(_:forKey:) devuelve un valor Optional. Ejemplo:
import Cocoa
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict.updateValue("One 新的值", forKey: 1)
var someVar = someDict[1]
print( "key = 1 旧的值 \(oldVal)" )
print( "key = 1 的值为 \(someVar)" )
print( "key = 2 的值为 \(someDict[2])" )
print( "key = 3 的值为 \(someDict[3])" )
El resultado de ejecutar el programa anterior es:
key = 1 旧的值 Optional("One")
key = 1 的值为 Optional("One 新的值")
key = 2 的值为 Optional("Two")
key = 3 的值为 Optional("Three")
También puedes modificar el valor de un diccionario mediante una clave específica, como se muestra a continuación:
import Cocoa var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"] var oldVal = someDict[1] someDict[1] = "One 新的值" var someVar = someDict[1] print( "key = 1 旧的值 \(oldVal)" ) print( "key = 1 的值为 \(someVar)" ) print( "key = 2 的值为 \(someDict[2])" ) print( "key = 3 的值为 \(someDict[3])" )
El resultado de ejecutar el programa anterior es:
key = 1 旧的值 Optional("One")
key = 1 的值为 Optional("One 新的值")
key = 2 的值为 Optional("Two")
key = 3 的值为 Optional("Three")
Eliminar pares clave-valor
Podemos usarremoveValueForKey()el método para eliminar pares clave-valor del diccionario. Si la clave existe, el método devuelve el valor eliminado; si no existe, devuelve nil. Ejemplo:
import Cocoa var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"] var removedValue = someDict.removeValue(forKey: 2) print( "key = 1 的值为 \(someDict[1])" ) print( "key = 2 的值为 \(someDict[2])" ) print( "key = 3 的值为 \(someDict[3])" )
El resultado de ejecutar el programa anterior es:
key = 1 的值为 Optional("One")
key = 2 的值为 nil
key = 3 的值为 Optional("Three")
También puedes eliminar un par clave-valor asignando nil al valor de la clave especificada. Ejemplo:
import Cocoa var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"] someDict[2] = nil print( "key = 1 的值为 \(someDict[1])" ) print( "key = 2 的值为 \(someDict[2])" ) print( "key = 3 的值为 \(someDict[3])" )
El resultado de ejecutar el programa anterior es:
key = 1 的值为 Optional("One")
key = 2 的值为 nil
key = 3 的值为 Optional("Three")
Recorrer el diccionario
Podemos usarfor-inun bucle para recorrer los pares clave-valor de un diccionario. Ejemplo:
import Cocoa
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict {
print("字典 key \(key) - 字典 value \(value)")
}
El resultado de ejecutar el programa anterior es:
字典 key 2 - 字典 value Two 字典 key 3 - 字典 value Three 字典 key 1 - 字典 value One
También podemos usar el método enumerate() para recorrer el diccionario, que devuelve el índice del diccionario y los pares (key, value). Ejemplo:
import Cocoa
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict.enumerated() {
print("字典 key \(key) - 字典 (key, value) 对 \(value)")
}
El resultado de ejecutar el programa anterior es:
字典 key 0 - 字典 (key, value) 对 (2, "Two") 字典 key 1 - 字典 (key, value) 对 (3, "Three") 字典 key 2 - 字典 (key, value) 对 (1, "One")
Convertir diccionario en array
Puedes extraer los pares clave-valor del diccionario y convertirlos en arrays separados. Ejemplo:
import Cocoa
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)
print("输出字典的键(key)")
for (key) in dictKeys {
print("\(key)")
}
print("输出字典的值(value)")
for (value) in dictValues {
print("\(value)")
}
El resultado de ejecutar el programa anterior es:
输出字典的键(key) 2 3 1 输出字典的值(value) Two Three One
Propiedad count
Podemos usar la propiedad de solo lecturacountpara calcular cuántos pares clave-valor tiene el diccionario:
import Cocoa
var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]
print("someDict1 含有 \(someDict1.count) 个键值对")
print("someDict2 含有 \(someDict2.count) 个键值对")
El resultado de ejecutar el programa anterior es:
someDict1 含有 3 个键值对 someDict2 含有 2 个键值对
Propiedad isEmpty
Y podemos, mediante la propiedad de solo lectura,isEmptydeterminar si el diccionario está vacío; devuelve un valor booleano.
import Cocoa
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)")
El resultado de ejecutar el programa anterior es:
someDict1 = false someDict2 = false someDict3 = trueOtras extensiones