Estou tendo dificuldade em entender o que os métodos shift e unshift da classe Array fazem em Ruby. Alguém pode me ajudar a entender o que eles fazem?
push
entra no topo e shift
sai do outro lado.
Estou tendo dificuldade em entender o que os métodos shift e unshift da classe Array fazem em Ruby. Alguém pode me ajudar a entender o que eles fazem?
push
entra no topo e shift
sai do outro lado.
Respostas:
Olhando para a documentação Ruby
Array.shift remove o primeiro elemento da matriz e o retorna
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
Unshift adiciona o valor fornecido à frente da matriz, movendo todos os outros elementos um para cima
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
shift
e unshift
agiria como uma pilha FILO, push
e shift
agiria como uma fila FIFO, a menos que eu esteja confuso sobre algo.
shift
e unshift
atua de maneira semelhante a pop
e push
: destinam-se a usar arrays como pilhas às quais você pode anexar e remover elementos (geralmente um por vez). A diferença é apenas isso shift
e unshift
adicionar / elementos retirar, no início de uma Array
, na verdade mudar ing todos os outros elementos, enquanto pop
e push
adicionar / elementos retirar, no final doArray
, assim preservando índices de outros elementos.
Exemplos:
# Spacing for clarity:
a = [2, 4, 8] # a => [2, 4, 8]
a.push(16, 32) # a => [2, 4, 8, 16, 32]
a.unshift(0, 1) # a => [0, 1, 2, 4, 8, 16, 32]
a.shift # a => [1, 2, 4, 8, 16, 32]
a.pop # a => [1, 2, 4, 8, 16]
Ele pega o primeiro elemento, remove-o da matriz e retorna o elemento removido. É basicamente uma maneira de tratar um array como uma pilha: shift
é pop, unshift
é push.
pop
e push
são também Array
método, não há confusão. :-)
Se você pode pensar na matriz como sendo uma fila de valores a serem processados, então você pode pegar o próximo valor (frontal) e "deslocar" o outro valor para ocupar o espaço disponível. unshift coloca os valores de volta - talvez você não esteja pronto para processar alguns deles ou permitirá que algum código posterior os manipule.
shift/unshift
são comopush/pop
na outra extremidade do array, você pode eliminar mentalmente o 'f' do nome dos métodos para lembrar qual deles 'despeja' os elementos e qual os 'insere'. :)