Filter
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 24 de 56.
filter toma una clausura de predicado y devuelve un nuevo array que contiene solo los elementos para los cuales la clausura devolvió true.
let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]El resultado mantiene el orden original. El tipo de resultado coincide con el tipo de entrada, no ocurre ninguna transformación, solo una selección.
filter se encadena de forma natural con map:
let big = nums
.filter { $0 > 2 }
.map { $0 * $0 }
print(big) // [9, 16, 25, 36]Lee cada cadena de arriba a abajo, al igual que una tubería. Cada paso produce un nuevo array; nada modifica el original.
Desafío
FácilLee dos líneas de entrada:
- Una lista de enteros separados por comas
- Un entero
min
Imprime, en líneas separadas:
- Los enteros estrictamente mayores que
min, unidos con,(o vacío si ninguno califica) - Los cuadrados de los enteros que califican, unidos con
, - La cantidad de enteros que califican
Usa filter + map como una cadena. No iterar dos veces sobre la entrada.
Para la entrada 1,5,2,8,3,7 en la línea 1 y 4 en la línea 2, el resultado es:
5,8,7
25,64,49
3Hoja de referencia
Usa filter para seleccionar elementos que coincidan con una condición:
let evens = [1,2,3,4].filter { $0 % 2 == 0 } // [2, 4]Encadena filter con map como una tubería (pipeline):
let result = nums
.filter { $0 > 2 }
.map { $0 * $0 } // [9, 16, 25, 36]Cada paso devuelve un nuevo array; el original permanece sin cambios. Se preserva el orden.
Pruébalo tú mismo
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!
// TODO: filtrar > min una vez, luego mapear a cuadrados; imprimir ambos, luego contar
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras