El método enumerate
Parte de la sección Fundamentos del Journey de Swift de Coddy — lección 70 de 86.
A veces, al iterar sobre un array, necesitas conocer no solo el elemento, sino también su posición. Aunque podrías rastrear manualmente el índice con una variable contador, Swift ofrece una solución más limpia: el método enumerated().
Cuando llamas a enumerated() en un arreglo, devuelve una secuencia de tuplas, donde cada tupla contiene el índice y el elemento:
let colors = ["Red", "Green", "Blue"]
for (index, color) in colors.enumerated() {
print("\(index): \(color)")
}
// 0: Red
// 1: Green
// 2: BlueObserva cómo descomponemos cada tupla directamente en el bucle usando (index, color). Esto nos da acceso a ambos valores sin necesidad de código adicional.
Esto es particularmente útil cuando necesitas mostrar listas numeradas o realizar operaciones que dependen de la posición de un elemento:
let tasks = ["Wake up", "Exercise", "Eat breakfast"]
for (index, task) in tasks.enumerated() {
print("Task \(index + 1): \(task)")
}
// Tarea 1: Wake up
// Tarea 2: Exercise
// Tarea 3: Eat breakfastEl método enumerated() mantiene tu código limpio y legible en comparación con gestionar manualmente una variable de contador separada.
Desafío
FácilEscribe una función formatWithPositions que reciba items y devuelva una cadena con formato que muestre cada elemento con su número de posición.
Usa el método enumerated() para iterar a través del arreglo y construir una cadena donde cada elemento esté precedido por su número de posición basado en 1.
Lógica:
- Itera a través del arreglo usando
enumerated() - Para cada elemento, crea una cadena con el formato
"position. item"(usando numeración basada en 1) - Une todas las cadenas formateadas con un carácter de nueva línea (
\n)
Parámetros:
items([String]): Un arreglo de cadenas para formatear
Devuelve: Una sola cadena con cada elemento en su propia línea, precedido por su número de posición (String). Formato: "1. item1\n2. item2\n3. item3"
Ejemplo: Si items es ["Apple", "Banana", "Cherry"], la función debería devolver:
"1. Apple\n2. Banana\n3. Cherry"Nota: Si el arreglo está vacío, devuelve una cadena vacía "".
Hoja de referencia
El método enumerated() devuelve una secuencia de tuplas que contienen tanto el índice como el elemento de un arreglo:
let colors = ["Red", "Green", "Blue"]
for (index, color) in colors.enumerated() {
print("\(index): \(color)")
}
// 0: Red
// 1: Green
// 2: BlueCada tupla se descompone directamente en el bucle utilizando la sintaxis (index, element), proporcionando acceso tanto a la posición como al valor.
Esto es útil para crear listas numeradas sumando 1 al índice basado en cero:
let tasks = ["Wake up", "Exercise", "Eat breakfast"]
for (index, task) in tasks.enumerated() {
print("Task \(index + 1): \(task)")
}
// Task 1: Wake up
// Task 2: Exercise
// Task 3: Eat breakfastPruébalo tú mismo
func formatWithPositions(items: [String]) -> String {
// Escribe el código aquí
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores Parte 1
Operadores aritméticosOperador de móduloAsignación compuestaResumen - Matemáticas simplesOperadores de comparación7E/S Básica
Función PrintInterpolación de StringsEntrada ReadLineConversión de TiposRepaso - Hasta 120Repaso - Verdadero o Falso10Funciones
Declarar una funciónParámetros y argumentosValores de retornoEtiquetas de argumentosResumen - Función SigmaResumen - Función de validaciónValores por defecto13Iterar sobre secuencias
Iterar sobre elementosEl método enumerateIterar sobre cadenas P1Iterar sobre cadenas P22Variables
Let vs VarAnotaciones de tiposNúmerosStringsBooleanosConvenciones de nomenclaturaResumen - Inicializar variables5Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Repaso - Lógica simpleOperadores lógicos Parte 3Operador ternario8Calculadora para dividir la cuenta
Mensaje de bienvenidaObtener la entrada de datos11FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz3Opcionales
Qué son los opcionalesDesempaquetado con If LetGuard LetOperador de coalescencia nulaResumen - Desempaquetado seguro6Toma de decisiones
Sentencia IfIf - ElseRepaso - Calculadora simpleSentencia SwitchSwitch con rangos9Bucles
Bucle For-InBucle WhileBucle Repeat-WhileBreakContinueRepaso - FactorialRangos en buclesBucle anidadoRepaso - Entrada dinámica