← Swift EspañolChapter 06 of 13

Colecciones

## Objetivos de Aprendizaje - Trabajar con Arreglos - Usar Sets para valores unicos - Dominar Diccionarios - Comprender la mutabilidad de colecciones ## Arreglos ### Crear Arreglos ```swift // Arreglo vacio let vacio: [Int] = [] let vacio2 = Array() // Con valores iniciales let numeros = [1, 2, 3, 4, 5] let cadenas = ["uno", "dos", "tres"] // Valor repetido let ceros = [Int](repeating: 0, count: 5) // [0, 0, 0, 0, 0] ``` ### Anotacion de Tipo ```swift let enteros: [Int] = [1, 2, 3] let dobles: [Double] = [1.0, 2.0, 3.0] let cadenas: [String] = ["a", "b", "c"] ``` ### Forma Abreviada de Tipo de Arreglo ```swift var nombres: [String] = ["Alicia", "Roberto"] // nombres es Array ``` ## Acceder a Elementos ### Acceso por Indice ```swift let frutas = ["manzana", "banana", "cereza"] let primero = frutas[0] // "manzana" let ultimo = frutas[2] // "cereza" // frutas[5] // Error en tiempo de ejecucion! ``` ### Primero y Ultimo ```swift let primero = frutas.first // Optional("manzana") let ultimo = frutas.last // Optional("cereza") if let primero = frutas.first { print(primero) } ``` ### Verificar si Esta Vacio ```swift let vacio: [Int] = [] vacio.isEmpty // true vacio.count // 0 let numeros = [1, 2, 3] numeros.isEmpty // false numeros.count // 3 ``` ## Modificar Arreglos ### Arreglos var ```swift var arreglo = [1, 2, 3] // Agregar elemento arreglo.append(4) // [1, 2, 3, 4] // Agregar contenidos de otro arreglo arreglo.append(contentsOf: [5, 6]) // [1, 2, 3, 4, 5, 6] // Insertar en indice arreglo.insert(0, at: 0) // [0, 1, 2, 3, 4, 5, 6] // Remover arreglo.remove(at: 0) // Devuelve 0, arreglo es [1, 2, 3, 4, 5, 6] arreglo.removeFirst() // Devuelve 1, arreglo es [2, 3, 4, 5, 6] arreglo.removeLast() // Devuelve 6, arreglo es [2, 3, 4, 5] // Remover todos arreglo.removeAll() ``` ### Actualizar Elementos ```swift var puntuaciones = [90, 85, 88] puntuaciones[0] = 95 // [95, 85, 88] puntuaciones[1...2] = [100, 100] // [95, 100, 100] ``` ## Iteracion de Arreglos ### Bucle For-In ```swift let frutas = ["manzana", "banana", "cereza"] for fruta in frutas { print(fruta) } // Con indice for (indice, fruta) in frutas.enumerated() { print("\(indice): \(fruta)") } ``` ## Metodos de Arreglos ### Ordenar ```swift var numeros = [3, 1, 4, 1, 5, 9, 2, 6] numeros.sort() // En lugar: [1, 1, 2, 3, 4, 5, 6, 9] let ordenado = numeros.sorted() // Devuelve nuevo arreglo // Orden personalizado let ordenadoDesc = numeros.sorted(by: >) // Descendente ``` ### Invertir ```swift let invertido = numeros.reversed() // ReversedCollection let arregloInvertido = Array(numeros.reversed()) // [6, 2, 9, 5, 1, 4, 1, 3] ``` ### Contiene y Encontrar ```swift let numeros = [1, 2, 3, 4, 5] numeros.contains(3) // true numeros.contains { $0 > 3 } // true if let indice = numeros.firstIndex(of: 3) { print("Encontrado en \(indice)") } if let primero = numeros.first(where: { $0 > 3 }) { print("Primero > 3 es \(primero)") // 4 } ``` ### Filtrar ```swift let numeros = [1, 2, 3, 4, 5, 6] let pares = numeros.filter { $0 % 2 == 0 } // [2, 4, 6] let mayoresA3 = numeros.filter { $0 > 3 } // [4, 5, 6] ``` ### Mapear ```swift let numeros = [1, 2, 3] let duplicados = numeros.map { $0 * 2 } // [2, 4, 6] let cadenas = numeros.map { String($0) } // ["1", "2", "3"] ``` ### Reducir ```swift let numeros = [1, 2, 3, 4, 5] let suma = numeros.reduce(0) { $0 + $1 } // 15 let producto = numeros.reduce(1, *) // 120 ``` ## Sets ### Crear Sets ```swift // Set vacio let vacio: Set = Set() let vacio2 = Set() // Con valores var frutas: Set = ["manzana", "banana", "cereza"] let numeros: Set = [1, 2, 3, 4, 5] ``` ### Propiedades Clave ```swift let colores = Set(["rojo", "verde", "azul"]) colores.count // 3 colores.isEmpty // false colores.first // Valor Optional (sin orden) ``` ## Operaciones de Set ### Insertar y Remover ```swift var frutas: Set = ["manzana", "banana"] frutas.insert("cereza") // ("cereza", true) si es nuevo frutas.remove("manzana") // Optional("manzana") si existia frutas.remove("uva") // nil (no esta en el set) // Verificar membresia if frutas.contains("banana") { print("Tiene banana") } ``` ### Union ```swift let setA: Set = [1, 2, 3] let setB: Set = [3, 4, 5] let union = setA.union(setB) // [1, 2, 3, 4, 5] let unionA = setA | setB // [1, 2, 3, 4, 5] ``` ### Interseccion ```swift let comun = setA.intersection(setB) // [3] let comun2 = setA & setB // [3] ``` ### Substraccion ```swift let soloA = setA.subtracting(setB) // [1, 2] let soloA2 = setA - setB // [1, 2] ``` ### Diferencia Simetrica ```swift let diff = setA.symmetricDifference(setB) // [1, 2, 4, 5] let diff2 = setA ^ setB // [1, 2, 4, 5] ``` ### Subset y Superset ```swift let a: Set = [1, 2] let b: Set = [1, 2, 3] let c: Set = [1, 2, 3] a.isSubset(of: b) // true b.isSuperset(of: a) // true b.isStrictSubset(of: c) // false b.isStrictSuperset(of: a) // true ``` ## Diccionarios ### Crear Diccionarios ```swift // Diccionario vacio let vacio: [String: Int] = [:] let vacio2 = Dictionary() // Con valores var edades = ["Alicia": 30, "Roberto": 25, "Carlos": 35] ``` ### Anotacion de Tipo de Diccionario ```swift var nombres: [Int: String] = [ 1: "Uno", 2: "Dos", 3: "Tres" ] ``` ## Acceder a Valores ### Acceso con Subindice ```swift let edades = ["Alicia": 30, "Roberto": 25] let edad = edades["Alicia"] // Optional(30) let desconocido = edades["Eva"] // nil // Proporcionar valor por defecto let nombre = edades["Alicia", default: 0] // 30 let faltante = edades["Eva", default: 0] // 0 ``` ### Existencia de Clave ```swift if edades["Alicia"] != nil { print("Alicia existe") } // Alternativa if let edadAlicia = edades["Alicia"] { print("Alicia tiene \(edadAlicia)") } ``` ## Modificar Diccionarios ### Agregar/Actualizar ```swift var edades = ["Alicia": 30, "Roberto": 25] // Agregar nuevo edades["Carlos"] = 35 // Actualizar existente edades["Alicia"] = 31 // Actualizar con closure edades.updateValue(40, forKey: "Roberto") // Devuelve valor antiguo (25) ``` ### Remover ```swift var edades = ["Alicia": 30, "Roberto": 25, "Carlos": 35] edades.removeValue(forKey: "Carlos") // Devuelve valor removido edades.removeValue(forKey: "Eva") // Devuelve nil edades["Roberto"] = nil // Tambien remueve edades.removeAll() ``` ## Iteracion de Diccionarios ### Bucle For-In de Diccionario ```swift let edades = ["Alicia": 30, "Roberto": 25, "Carlos": 35] for (nombre, edad) in edades { print("\(nombre): \(edad)") } // Solo claves for nombre in edades.keys { print(nombre) } // Solo valores for edad in edades.values { print(edad) } ``` ## Metodos de Diccionario ### Propiedades ```swift let edades = ["Alicia": 30, "Roberto": 25] edades.count // 2 edades.isEmpty // false edades.keys // ["Alicia", "Roberto"] edades.values // [30, 25] ``` ### Filtrado de Diccionario ```swift let edades = ["Alicia": 30, "Roberto": 25, "Carlos": 35, "Diana": 40] let adultos = edades.filter { $0.value >= 30 } // ["Alicia": 30, "Carlos": 35, "Diana": 40] ``` ### Mapeo de Diccionario ```swift let edades = ["Alicia": 30, "Roberto": 25] let descripciones = edades.mapValues { "\($0) anos" } // ["Alicia": "30 anos", "Roberto": "25 anos"] ``` ## Resumen - Arreglos: ordenados, indexados, permiten duplicados - Sets: desordenados, valores unicos, operaciones matematicas - Diccionarios: pares clave-valor, busqueda rapida - Usar `var` para colecciones mutables - Acceder con subindices o metodos - Funciones de orden superior: map, filter, reduce - `first`, `last` devuelven opcionales - Usar `isEmpty` antes de acceder

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →