Colecciones: ARRAY, SET y DICTIONARY en Swift en Español
Colecciones en Swift: Array, Set y Dictionary son estructuras de datos que puedes usar de la librería Standard de Swift, aprende las diferencias entre Array, Set y Dictionary. También puedes crear las tuyas propias, pero la mayoría de veces tendrás suficiente en tu aplicación usando estas tres.
Tabla de contenido
Swift nos proporciona 3 tipos de colecciones: Arrays, Sets y Dictionaries.
- Arrays, podemos guardar una colección de valores ordenados (ejemplo: [1, 2, 3, 1, 2, 3])
- Sets, podemos guardar una colección de valores desordenados pero únicos (ejemplo: [1, 2, 3])
- Dictionaries, podemos guardar una colección sin orden y de asociación clave-valor (ejemplo: ["name": "SwiftBeta", "surname": "Blog"])
Cuando definimos una de estas 3 colecciones, especificamos el tipo que queremos. Es decir, si creamos un array de strings, no podemos insertar un Int.
Si intentáramos añadir un Int a nuestro array de strings obtendríamos el siguiente error.
Colecciones Mutables en Swift
En el ejemplo anterior hemos mutado nuestra variable arrayStrings. Hemos podido hacerlo porque es una variable. Si hubiésemos creado una constante (con un let) hubieramos obtenido un error ya que como comentamos en uno de nuestros posts, al crear una constante no podemos modificar su valor.
Si sabemos que las colecciones no van a cambiar a lo largo del ciclo de nuestro programa, una buena práctica es crearlas inmutables . Esto nos ayuda a detectar bugs y ayuda al compilador de Swift a optimizar la performance de las colecciones que creamos.
Array en Swift
Un array almacena valores del mismo tipo en una lista ordenada. El mismo valor puede aparecer varias veces y en posiciones diferentes. Para inicializar un array podemos hacerlo de varias formas:
Funcionalmente las dos maneras hacen lo mismo, pero es preferible usar la primera.
Crear un Array vacío
Para crear un array sin ningún elemento dentro podemos hacer:
Crear Array con valor por defecto
Para inicializar un array con valores podemos hacer lo siguiente:
o una forma mucho más simple que hemos visto en otros ejemplos, es usando Array Literal
Esto es posible gracias a conformar el procotolo ExpressibleByArrayLiteral. Los protocolos lo veremos en futuros posts, pero te dejo más información en el siguiente enlace:
Acceder y Modificar un Array
Podemos acceder y modificar un array a través de sus métodos y propiedades
también podemos acceder y modificar usando la sintaxis de subscript
Set en Swift
Al usar sets nos aseguramos que los valores de la colección no estén repetidos. Si intentamos meter un elemento que ya esté en la colección, Swift no lo añadirá (hará como un filtrado, como este elemento ya está dentro de la colección, no lo meteré). Podemos usar set siempre y cuando el orden no sea importante o cuando queramos asegurarnos de que el elemento no se repita.
Un ejemplo de que el orden de un set varía es si los printamos, no tienen porque tener el mismo orden en el primer print que en el segundo. Lo mismo pasa al iterar en ellos.
Para poder almacenar elementos en un set, el tipo de la colección debe ser Hashable. Es decir, debe conformar este protocolo para poder identificar cuando dos elementos son iguales. Los tipos básicos en Swift como String, Int, Double y Bool son hashseables por defecto, pero si creamos un tipo propio como User debemos conformar el protocolo Hasheable para saber cuando dos Users son idénticos. Vamos a ver un ejemplo
Crear un Set
En el ejempo anterior, solo añade un elemento en el set. Aunque le pasemos las dos instancias de User, solo añadirá la primera y al intentar meter la segunda la descartará porque ya que existe un elemento en la colección con ese valor.
Hay muchos métodos similares al tipo array que se pueden usar en Set, aquí vemos unos ejemplos
Acceder y Modificar un Set en Swift
Los array y los set son muy similares, pero cada uno tiene sus restricciones, según el escenario que tengamos nos conviene usar uno u otro.
Dictionary en Swift
Los dictonary almacenan asociaciones entre keys del mismo tipo y valores del mismo tipo. En este caso tampoco tenemos un orden. Cada valor está asociado a una única key.
La Key de un Dictionary debe ser Hasheable, como hemos visto en la sección de los Set.
Crear un Dictionary vacío en Swift
Para crear un dictionary sin ningún elemento dentro podemos hacer lo siguiente:
var citiesInformation = [String: String]()
Hemos especificado que la key debe ser de tipo String y el valor debe ser de tipo String.
Otra manera de inicializar el mismo dictionary podría ser:
Crear Dictionary con valor por defecto Swift
Para inicializar un sictionary con valores podemos hacer lo siguiente, usando Dictionary Literal
Al tener una key y value tipo String, citiesInformation es del tipo [String: String]
Acceder y Modificar un Dictionary en Swift
Vamos a usar mucho estas 3 colecciones, sobretodo de tipo array y dictionary