Trudno mi zrozumieć, co robią metody shift i unshift klasy Array w języku Ruby. Czy ktoś może mi pomóc zrozumieć, co robią?
pushna górę i shiftna drugi koniec.
Trudno mi zrozumieć, co robią metody shift i unshift klasy Array w języku Ruby. Czy ktoś może mi pomóc zrozumieć, co robią?
pushna górę i shiftna 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"]
shifti unshiftzachowuje się jak stos FILO pushi shiftzachowywałby się jak kolejka FIFO, chyba że jestem z czymś zdezorientowany.
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]
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.
popi pushsą to Arraymetody, 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ł.
shift/unshiftsą jakpush/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”. :)