Arrays são um dos três principais tipos de coleção do Swift. Um array, também chamado de vetor, é uma lista ordenada de elementos. Arrays podem armazenar elementos de qualquer tipo, mas todos os elementos de um determinado array precisam ser do mesmo tipo. Arrays são mutáveis quando atribuídos a uma variável, o que significa que você pode adicionar, remover ou modificar elementos depois de criar o array. Quando atribuído a uma constante, um array é imutável, o que significa que seu conteúdo não pode ser alterado.
Literais de array são escritos como uma lista de elementos separados por vírgula e entre colchetes ([...]).
O Swift consegue inferir o tipo do array a partir dos elementos dentro do literal.
let evenInts = [2, 4, 6, 8, 10, 12]
var oddInts = [1, 3, 5, 7, 9, 11, 13]
let greetings = ["Hello!", "Hi!", "¡Hola!"]
Você também pode especificar o tipo explicitamente.
Os tipos de array podem ser escritos de duas formas: Array<T> ou a sintaxe abreviada [T], em que T é o tipo dos valores que o array contém.
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!"]
Você pode descobrir o número de elementos em um array usando a propriedade count:
evenInts.count
// returns 6
Para criar um array vazio, você precisa especificar o tipo dele. Você pode fazer isso usando a sintaxe de inicializador de array ou uma anotação de tipo explícita:
let emptyArray = [Int]()
let emptyArray2 = Array<Int>()
let emptyArray3: [Int] = []
Arrays podem ser aninhados para criar arrays multidimensionais.
Ao especificar o tipo de um array aninhado explicitamente, coloque o tipo do elemento entre colchetes aninhados, como [[Int]] ou 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]]
Você pode adicionar um elemento ao final de um array mutável usando o 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]
Você pode inserir um elemento em um índice específico usando o método insert(_:at:).
Esse método recebe dois argumentos: o elemento a inserir e o índice no qual inseri-lo.
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]
Você pode combinar dois arrays em um único array usando o operador +.
O operador + cria e retorna um novo array. Ele não modifica os arrays originais.
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]
Você pode acessar um elemento individual de um array colocando o índice dele entre colchetes ([]) depois do nome do array.
Os índices de array são valores Int baseados em zero, começando em 0 para o primeiro elemento.
Acessar um índice fora do intervalo válido causa um erro em tempo de execução e faz o programa travar.
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
Você pode alterar um elemento em um array mutável atribuindo um novo valor a um índice específico. Assim como na leitura de elementos, usar um índice fora do intervalo válido causa um erro em tempo de execução.
var evenInts = [2, 4, 6, 8, 10, 12]
evenInts[2] = 0
// evenInts is now [2, 4, 0, 8, 10, 12]
Você pode juntar um array de strings em uma única string usando o método joined(separator:), que recebe uma string separadora:
let evenInts = ["2", "4", "6", "8", "10", "12"]
let evenIntsString = evenInts.joined(separator: ", ")
// returns "2, 4, 6, 8, 10, 12"
Você pode dividir uma string em um array de substrings usando o método split(separator:), passando o caractere delimitador:
let evenIntsString = "2, 4, 6, 8, 10, 12"
let evenInts = evenIntsString.split(separator: ",")
// returns ["2", " 4", " 6", " 8", " 10", " 12"]
Você pode remover um elemento em um determinado índice usando o método remove(at:).
O índice precisa estar dentro dos limites válidos do array; caso contrário, ocorre um erro em tempo de execução.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.remove(at: 3)
// oddInts is now [1, 3, 5, 9, 11, 13]
Para remover o último elemento de um array, use o método removeLast().
Chamar removeLast() em um array vazio causa um erro em tempo de execução.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.removeLast()
// oddInts is now [1, 3, 5, 7, 9, 11]
Como uma futura maga, Elyse precisa praticar alguns fundamentos. Ela tem uma pilha de cartas que quer manipular.
Para facilitar um pouco as coisas, ela usa apenas as cartas de 1 a 10, então a pilha de cartas dela pode ser representada por um array de números. A posição de uma carta corresponde ao índice no array. Isso significa que a posição 0 se refere à primeira carta, a posição 1 à segunda, e assim por diante.
Todas as funções devem atualizar o array de cartas e então retornar o array modificado, uma forma comum de trabalhar conhecida como padrão Builder, que permite encadear funções de forma elegante.
Para pegar uma carta, retorne a carta no índice position da pilha fornecida.
Implemente a função getCard(at:from:) que recebe dois argumentos: at, que é a posição da carta na pilha, e from, que é a pilha de cartas.
A função deve retornar a carta na posição index da pilha fornecida.
let index = 2
getCard(at: index, from: [1, 2, 4, 1])
// returns 4
Faça um truque de mágica e troque a carta no índice position pela carta de substituição fornecida.
Implemente a função setCard(at:in:to) que recebe três argumentos: at, que é a posição da carta na pilha, in, que é a pilha de cartas, e to, que é a nova carta que substitui a carta na posição index.
A função deve retornar uma cópia da pilha com a carta na posição index substituída pela nova carta.
Se o index fornecido não for um índice válido na pilha, a pilha original deve ser retornada, sem alterações.
let index = 2
let newCard = 6
setCard(at: index, in: [1, 2, 4, 1], to: newCard)
// returns [1, 2, 6, 1]
Faça uma carta aparecer inserindo uma nova carta no topo da pilha.
Implemente a função insert(_:atTopOf:) que recebe dois argumentos: a nova carta a ser inserida e a pilha de cartas.
A função deve retornar uma cópia da pilha com a nova carta fornecida adicionada ao topo da pilha.
let newCard = 8
insert(newCard, atTopOf: [5, 9, 7, 1])
// returns [5, 9, 7, 1, 8]
Faça uma carta desaparecer removendo da pilha a carta na position fornecida.
Implemente a função removeCard(at:from:) que recebe dois argumentos: at, que é a posição da carta na pilha, e from, que é a pilha de cartas.
A função deve retornar uma cópia da pilha com a carta na posição index removida.
Se o index fornecido não for um índice válido na pilha, a pilha original deve ser retornada, sem alterações.
let index = 2
removeCard(at: index, from: [3, 2, 6, 4, 8])
// returns [3, 2, 4, 8]
Faça uma carta aparecer inserindo uma nova carta na position fornecida na pilha.
Implemente a função insert(_:at:from:) que recebe três argumentos: a nova carta a ser inserida, a posição em que a nova carta deve ser inserida e a pilha de cartas.
A função deve retornar uma cópia da pilha com a nova carta fornecida adicionada na posição indicada.
Se o index fornecido não for um índice válido na pilha, a pilha original deve ser retornada, sem alterações.
let newCard = 8
insert(newCard, at: 2, from: [5, 9, 7, 1])
// returns [5, 9, 8, 7, 1]
Verifique se o tamanho da pilha é igual a stackSize ou não.
Implemente a função checkSizeOfStack(_:_:) que recebe dois argumentos: stack, que é a pilha de cartas, e stackSize, que é o tamanho da pilha.
A função deve retornar true se o tamanho da pilha for igual a stackSize e false caso contrário.
let stackSize = 4
checkSizeOfStack([3, 2, 6, 4, 8], stackSize)
// returns false
Crie sua conta no Exercism para aprender e dominar Swift com 35 conceitos116 exercícios e mentoria humana de verdade, tudo de graça.