Gdy dowiesz się, że shift/unshiftsą jak push/popna drugim końcu tablicy, możesz w myślach usunąć literę „f” z nazwy metody, aby zapamiętać, która z nich „zrzuca” elementy, a która je „wstawia”. :)
Phrogz
1
Dzięki, że faktycznie pomaga lol.
agentbanks217
Jeden z najlepszych komentarzy w historii! Dziękuję bardzo :)
tvdeyen
18
@Phrogz Właściwie układy trawienne kręgowców są lepiej modelowane jako kolejki niż jako stosy.
Jian
8
@Jian :) Dobrze: pushna górę i shiftna drugi koniec.
Zasadniczo możesz myśleć o zmianie i zwolnieniu ze zmiany jako operacji w kolejce FIFO
Jaco Pretorius
@JacoPretorius Huh? shifti unshiftzachowuje się jak stos FILO pushi shiftzachowywałby się jak kolejka FIFO, chyba że jestem z czymś zdezorientowany.
Greg Schmit
@GregSchmit Ah, masz rację. A właściwie kolejka LIFO, prawda?
Jaco Pretorius
@JacoPretorius Cóż, myślę, że LIFO == FILO (pierwsze w, ostatnie wychodzi, oznacza, że ostatni wchodzący musi wyjść jako pierwszy, jeśli wzór się utrzymuje).
Greg Schmit
@JacoPretorius Zarówno LIFO, jak i FILO oznaczają „zachowuj się jak stos”.
Greg Schmit
52
shifti unshiftdziałają podobnie jak popi push: mają na celu używanie tablic jako stosów, do których można dołączać i usuwać elementy (zwykle jeden na raz). Różnica polega na tym właśnie, że shifti unshiftdodać / elementy usunięcia co początkiem Array, faktycznie przesuwny ing wszystkie inne elementy, podczas gdy popi pushdodać / elementy usunięcia co do końca Array, więc zachowanie indeksów innych elementów.
Przykłady:
# 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]
Gdybyś miał edytować swoją odpowiedź, podsumowując wątek mipadi, byłbym szczęśliwy, mogąc zagłosować za.
Steven Sudit
Fajne. Nie mam też dużej wiedzy na temat Rubiego, ale gdyby działał na JVM, spodziewałbym się, że push / pop będzie szybszy, ponieważ nie musi przenosić wszystkich tych elementów.
Steven Sudit
Głosuj za analogią stosu, ale pomyśl też o rurach. Ponieważ mamy być programistami, powinniśmy również myśleć, że shift to przesunięcie w lewo, a unshift to przesunięcie w prawo na poziomej tablicy od lewej do prawej.
mckenzm
8
Przechwytuje pierwszy element, usuwa go z tablicy i zwraca usunięty element. Jest to po prostu sposób na traktowanie tablicy jak stosu: shiftjest pop, unshiftto wypychanie.
Cóż, shift i unshift są podobne do pop i push, z tą różnicą, że dodają i usuwają rzeczy od początku tablicy, zamiast od końca.
Alberto Santini
2
Ta odpowiedź jest na właściwym poziomie abstrakcji.
Steven Sudit
@Alberto: Lub, innymi słowy, uważają, że przód jest górą. Nie ma wymogu, aby było inaczej.
Steven Sudit
5
Zwróciłem tylko uwagę, że skoro popi pushsą to Arraymetody, nie należy wprowadzać zamieszania. :-)
Alberto Santini
3
@Alberto: Właściwie to dobra uwaga. Metody shift / unshift wykorzystują przód jako górę, podczas gdy metody push / pop używają końca jako góry. Obaj traktują tablicę jako stos, różniąc się tylko tym, którego końca używają.
Steven Sudit
2
Jeśli możesz myśleć o tablicy jako o kolejce wartości do przetworzenia, możesz wziąć następną (przednią) wartość i „przesunąć” drugą wartość, aby zająć udostępnioną przestrzeń. unshift przywraca wartości - być może nie jesteś gotowy do przetwarzania niektórych z nich lub pozwolisz, aby późniejszy kod je obsłużył.
shift/unshift
są jakpush/pop
na drugim końcu tablicy, możesz w myślach usunąć literę „f” z nazwy metody, aby zapamiętać, która z nich „zrzuca” elementy, a która je „wstawia”. :)push
na górę ishift
na drugi koniec.Odpowiedzi:
Przeglądając dokumentację Ruby
Array.shift usuwa pierwszy element z tablicy i zwraca go
a = [1,2,3] puts a.shift => 1 puts a => [2, 3]
Unshift poprzedza podaną wartość na początek tablicy, przenosząc wszystkie pozostałe elementy o jeden w górę
a=%w[b c d] => ["b", "c", "d"] a.unshift("a") => ["a", "b", "c", "d"]
źródło
shift
iunshift
zachowuje się jak stos FILOpush
ishift
zachowywałby się jak kolejka FIFO, chyba że jestem z czymś zdezorientowany.shift
iunshift
działają podobnie jakpop
ipush
: mają na celu używanie tablic jako stosów, do których można dołączać i usuwać elementy (zwykle jeden na raz). Różnica polega na tym właśnie, żeshift
iunshift
dodać / elementy usunięcia co początkiemArray
, faktycznie przesuwny ing wszystkie inne elementy, podczas gdypop
ipush
dodać / elementy usunięcia co do końcaArray
, więc zachowanie indeksów innych elementów.Przykłady:
# 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]
źródło
Przechwytuje pierwszy element, usuwa go z tablicy i zwraca usunięty element. Jest to po prostu sposób na traktowanie tablicy jak stosu:
shift
jest pop,unshift
to wypychanie.źródło
pop
ipush
są toArray
metody, nie należy wprowadzać zamieszania. :-)Jeśli możesz myśleć o tablicy jako o kolejce wartości do przetworzenia, możesz wziąć następną (przednią) wartość i „przesunąć” drugą wartość, aby zająć udostępnioną przestrzeń. unshift przywraca wartości - być może nie jesteś gotowy do przetwarzania niektórych z nich lub pozwolisz, aby późniejszy kod je obsłużył.
źródło
Zwraca pierwszy element tablicy i usuwa go z tablicy, przesuwając elementy z powrotem o jedno miejsce.
Więc się zmienia
[1,2,3,4,5]
zwraca
1
i ustawia tablicę na[2,3,4,5]
.Więcej tutaj .
źródło