Métodos de Rangos
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 9 de 56.
Los rangos son Collections reales, por lo que vienen con la misma caja de herramientas que usas en los arrays.
contains, count, first y last funcionan todos directamente:
let r = 1...10
print(r.contains(5)) // true
print(r.count) // 10
print(r.first!, r.last!) // 1 10La mayoría de los métodos de array que has usado también funcionan. filter devuelve un array porque el resultado de filtrar un rango no es en sí mismo un rango:
let evens = (1...10).filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6, 8, 10]Lo mismo ocurre con reduce: los rangos lo tienen, y te apoyarás en él para sumas y productos rápidos.
Desafío
FácilLee dos números enteros (en dos líneas): n y target. Trata el rango cerrado 1...n como tu conjunto de datos.
Imprime tres líneas:
truecuandotargetesté en el rango, de lo contrariofalse- El producto de cada valor en el rango (
n!: factorial). Usareduce. - Los valores en el rango que son múltiplos de
3, unidos con,(o una línea vacía cuando ninguno califique). Usafilter.
Para la entrada 5 / 3, la salida es:
true
120
3Hoja de referencia
Los rangos cumplen con Collection y admiten métodos de colección comunes:
let r = 1...10
r.contains(5) // true
r.count // 10
r.first! // 1
r.last! // 10filter en un rango devuelve un arreglo:
let evens = (1...10).filter { $0 % 2 == 0 }
// [2, 4, 6, 8, 10]reduce funciona directamente en rangos:
let product = (1...5).reduce(1) { $0 * $1 } // 120
let sum = (1...5).reduce(0, +) // 15Pruébalo tú mismo
let n = Int(readLine()!)!
let target = Int(readLine()!)!
let r = 1...n
// TODO: contains(target), producto mediante reduce, múltiplos de 3 mediante filter
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