Los arreglos son uno de los tres tipos de colección principales de Swift. Un arreglo es una lista ordenada de elementos. Los arrays pueden almacenar elementos de cualquier tipo, pero todos los elementos de un mismo array deben compartir el mismo tipo. Los arrays son mutables cuando se asignan a una variable, lo que significa que puedes agregar, eliminar o modificar elementos después de crear el array. Cuando se asignan a una constante, los arrays son inmutables, es decir, su contenido no se puede cambiar.
Los literales de array se escriben como una lista de elementos separados por comas y encerrados entre corchetes ([...]).
Swift puede inferir el tipo del array a partir de los elementos dentro del literal.
let evenInts = [2, 4, 6, 8, 10, 12]
var oddInts = [1, 3, 5, 7, 9, 11, 13]
let greetings = ["Hello!", "Hi!", "¡Hola!"]
También puedes especificar el tipo de forma explícita.
Los tipos de array se pueden escribir de dos maneras: Array<T> o la sintaxis abreviada [T], donde T es el tipo de los valores que contiene el array.
let evenInts: Array<Int> = [2, 4, 6, 8, 10, 12]
var oddInts: [Int] = [1, 3, 5, 7, 9, 11, 13]
let greetings: [String] = ["Hello!", "Hi!", "¡Hola!"]
Puedes obtener el número de elementos de un array usando su propiedad count:
evenInts.count
// returns 6
Para crear un array vacío, debes especificar su tipo. Puedes hacerlo usando la sintaxis de inicialización de arrays o una anotación de tipo explícita:
let emptyArray = [Int]()
let emptyArray2 = Array<Int>()
let emptyArray3: [Int] = []
Los arrays se pueden anidar para crear arrays multidimensionales.
Cuando especificas de forma explícita el tipo de un array anidado, encierra el tipo de los elementos entre corchetes anidados, como [[Int]] o Array<Array<Int>>:
let multiDimArray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let multiDimArray2: [[Int]] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Puedes agregar un elemento al final de un array mutable usando el método append(_:):
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.append(15)
// oddInts is now [1, 3, 5, 7, 9, 11, 13, 15]
Puedes insertar un elemento en un índice específico usando el método insert(_:at:).
Este método recibe dos argumentos: el elemento que vas a insertar y el índice en el que lo vas a insertar.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.insert(0, at: 0)
// oddInts is now [0, 1, 3, 5, 7, 9, 11, 13]
Puedes combinar dos arrays en un solo array usando el operador +.
El operador + crea y devuelve un array nuevo; no modifica los arrays originales.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
let combined = oddInts + [15, 17, 19]
// combined is [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print(oddInts)
// prints [1, 3, 5, 7, 9, 11, 13]
Puedes acceder a un elemento individual de un array colocando su índice entre corchetes ([]) después del nombre del array.
Los índices de un array son valores Int basados en cero, que empiezan en 0 para el primer elemento.
Acceder a un índice fuera del rango válido provoca un error en tiempo de ejecución y hace que el programa se bloquee.
let evenInts = [2, 4, 6, 8, 10, 12]
let oddInts = [1, 3, 5, 7, 9, 11, 13]
evenInts[2]
// returns 6
oddInts[7]
// Fatal error: Index out of range
Puedes cambiar un elemento de un array mutable asignando un valor nuevo a un índice específico. Igual que al leer elementos, usar un índice fuera del rango válido provoca un error en tiempo de ejecución.
var evenInts = [2, 4, 6, 8, 10, 12]
evenInts[2] = 0
// evenInts is now [2, 4, 0, 8, 10, 12]
Puedes unir un array de strings en un solo string usando el método joined(separator:), que recibe un string separador:
let evenInts = ["2", "4", "6", "8", "10", "12"]
let evenIntsString = evenInts.joined(separator: ", ")
// returns "2, 4, 6, 8, 10, 12"
Puedes dividir un string en un array de substrings usando el método split(separator:), pasando el carácter delimitador:
let evenIntsString = "2, 4, 6, 8, 10, 12"
let evenInts = evenIntsString.split(separator: ",")
// returns ["2", " 4", " 6", " 8", " 10", " 12"]
Puedes eliminar un elemento en un índice dado usando el método remove(at:).
El índice debe estar dentro de los límites válidos del array; de lo contrario, se produce un error en tiempo de ejecución.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.remove(at: 3)
// oddInts is now [1, 3, 5, 9, 11, 13]
Para eliminar el último elemento de un array, usa el método removeLast().
Llamar a removeLast() en un array vacío provoca un error en tiempo de ejecución.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.removeLast()
// oddInts is now [1, 3, 5, 7, 9, 11]
Como futura maga, Elyse necesita practicar algunos conceptos básicos. Tiene una pila de cartas que quiere manipular.
Para que todo sea un poco más fácil, solo usa las cartas del 1 al 10, así que su pila de cartas se puede representar con un array de números. La posición de una carta determinada corresponde al índice en el array. Eso significa que la posición 0 se refiere a la primera carta, la posición 1 a la segunda, etc.
Todas las funciones deben actualizar el array de cartas y luego devolver el array modificado. Esta es una forma de trabajar muy común, conocida como patrón Builder, que te permite encadenar funciones de manera muy cómoda.
Para elegir una carta, devuelve la carta que está en el índice position de la pila dada.
Implementa la función getCard(at:from:), que recibe dos argumentos: at, que es la posición de la carta en la pila, y from, que es la pila de cartas.
La función debe devolver la carta que está en la posición index de la pila dada.
let index = 2
getCard(at: index, from: [1, 2, 4, 1])
// returns 4
Haz un poco de prestidigitación e intercambia la carta que está en el índice position por la carta de reemplazo que se proporciona.
Implementa la función setCard(at:in:to), que recibe tres argumentos: at, que es la posición de la carta en la pila; in, que es la pila de cartas; y to, que es la nueva carta que va a reemplazar a la carta que está en la posición index.
La función debe devolver una copia de la pila con la carta que está en la posición index reemplazada por la nueva carta.
Si el index dado no es un índice válido en la pila, se debe devolver la pila original, sin cambios.
let index = 2
let newCard = 6
setCard(at: index, in: [1, 2, 4, 1], to: newCard)
// returns [1, 2, 6, 1]
Haz aparecer una carta insertando una nueva carta en la parte superior de la pila.
Implementa la función insert(_:atTopOf:), que recibe dos argumentos: la nueva carta que se va a insertar y la pila de cartas.
La función debe devolver una copia de la pila con la nueva carta proporcionada agregada en la parte superior de la pila.
let newCard = 8
insert(newCard, atTopOf: [5, 9, 7, 1])
// returns [5, 9, 7, 1, 8]
Haz desaparecer una carta eliminando de la pila la carta que está en la position dada.
Implementa la función removeCard(at:from:), que recibe dos argumentos: at, que es la posición de la carta en la pila, y from, que es la pila de cartas.
La función debe devolver una copia de la pila con la carta que está en la posición index eliminada.
Si el index dado no es un índice válido en la pila, se debe devolver la pila original, sin cambios.
let index = 2
removeCard(at: index, from: [3, 2, 6, 4, 8])
// returns [3, 2, 4, 8]
Haz aparecer una carta insertando una nueva carta en la position dada dentro de la pila.
Implementa la función insert(_:at:from:), que recibe tres argumentos: la nueva carta que se va a insertar, la posición en la que se debe insertar la nueva carta y la pila de cartas.
La función debe devolver una copia de la pila con la nueva carta proporcionada agregada en la posición dada.
Si el index dado no es un índice válido en la pila, se debe devolver la pila original, sin cambios.
let newCard = 8
insert(newCard, at: 2, from: [5, 9, 7, 1])
// returns [5, 9, 8, 7, 1]
Comprueba si el tamaño de la pila es igual a stackSize o no.
Implementa la función checkSizeOfStack(_:_:), que recibe dos argumentos: stack, que es la pila de cartas, y stackSize, que es el tamaño de la pila.
La función debe devolver true si el tamaño de la pila es igual a stackSize y false en caso contrario.
let stackSize = 4
checkSizeOfStack([3, 2, 6, 4, 8], stackSize)
// returns false
Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.