Depois de aprender que shift/unshiftsão como push/popna 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'. :)
Phrogz
1
Obrigado, isso realmente ajuda lol.
agentbanks217
Um dos melhores comentários de todos os tempos! Muito obrigado :)
tvdeyen
18
@Phrogz Na verdade, os sistemas digestivos de vertebrados são melhor modelados como filas do que como pilhas.
Jian
8
@Jian :) Certo: pushentra no topo e shiftsai do outro lado.
Você pode basicamente pensar em shift e unshift como sendo operações em uma fila FIFO
Jaco Pretorius,
@JacoPretorius Huh? shifte unshiftagiria como uma pilha FILO, pushe shiftagiria como uma fila FIFO, a menos que eu esteja confuso sobre algo.
Greg Schmit
@GregSchmit Ah, você está certo. Ou, na verdade, uma fila LIFO, certo?
Jaco Pretorius
@JacoPretorius Bem, eu acho que LIFO == FILO (primeiro a entrar, último a sair implica que o último a entrar deve sair primeiro se o padrão for válido).
Greg Schmit
@JacoPretorius Ambos LIFO e FILO significam "se comportar como uma pilha".
Greg Schmit
52
shift e unshift atua de maneira semelhante a pope 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 shifte unshiftadicionar / elementos retirar, no início de uma Array, na verdade mudar ing todos os outros elementos, enquanto pope pushadicionar / 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]
Se você editar sua resposta para resumir o tópico do mipadi, eu ficaria feliz em votar positivamente.
Steven Sudit de
Legal. Além disso, não tenho muito conhecimento sobre Ruby, mas se ele for executado na JVM, eu esperaria que o push / pop fosse mais rápido, pois não precisa mover todos esses elementos.
Steven Sudit de
Vote positivamente para analogia com a pilha, mas pense também nos canais. Como devemos ser programadores, também devemos pensar que shift é um shift-left e unshift é um shift-right em um array horizontal da esquerda para a direita.
mckenzm
8
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.
Bem, shift e unshift são semelhantes a pop e push, exceto que eles adicionam e removem coisas do início de uma matriz, em vez do final.
Alberto Santini,
2
Essa resposta está precisamente no nível correto de abstração.
Steven Sudit de
@Alberto: Ou seja, consideram a frente como o topo. Não há nenhuma exigência para que seja diferente.
Steven Sudit de
5
Eu estava apenas apontando que, uma vez que pope pushsão também Arraymétodo, não há confusão. :-)
Alberto Santini
3
@Alberto: Na verdade, é um bom ponto. Os métodos shift / unshift usam a frente como topo, enquanto os métodos push / pop usam a extremidade como topo. Ambos tratam o array como uma pilha, diferindo apenas na extremidade que usam.
Steven Sudit de
2
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'. :)push
entra no topo eshift
sai do outro lado.Respostas:
Olhando para a documentação Ruby
Array.shift remove o primeiro elemento da matriz e o retorna
Unshift adiciona o valor fornecido à frente da matriz, movendo todos os outros elementos um para cima
fonte
shift
eunshift
agiria como uma pilha FILO,push
eshift
agiria como uma fila FIFO, a menos que eu esteja confuso sobre algo.shift
eunshift
atua de maneira semelhante apop
epush
: destinam-se a usar arrays como pilhas às quais você pode anexar e remover elementos (geralmente um por vez). A diferença é apenas issoshift
eunshift
adicionar / elementos retirar, no início de umaArray
, na verdade mudar ing todos os outros elementos, enquantopop
epush
adicionar / elementos retirar, no final doArray
, assim preservando índices de outros elementos.Exemplos:
fonte
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.fonte
pop
epush
são tambémArray
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.
fonte
Ele retorna o primeiro elemento da matriz e o remove da matriz, deslocando os elementos de volta para um lugar.
Tão mudando
[1,2,3,4,5]
retorna
1
e define a matriz como[2,3,4,5]
.Mais aqui .
fonte