Pertanyaan Apa yang dilakukan dengan Array Ruby # shift?


Saya mengalami kesulitan memahami apa metode Shift dan Unshift dari kelas Array dilakukan di Ruby. Adakah yang bisa membantu saya memahami apa yang mereka lakukan?


75
2017-09-15 14:31


asal


Jawaban:


Melihat ke Dokumentasi Ruby

Array.shift menghapus elemen pertama dari array dan mengembalikannya

a = [1,2,3] 
puts a.shift
 => 1 
puts a
 => [2, 3] 

Unshift menambahkan nilai yang disediakan ke bagian depan array, memindahkan semua elemen lain ke atas

a=%w[b c d]
 => ["b", "c", "d"] 
a.unshift("a")
 => ["a", "b", "c", "d"] 

83
2017-09-15 14:39



shift dan unshift bertindak dengan cara yang sama seperti pop dan push: mereka dimaksudkan untuk menggunakan array sebagai tumpukan yang dapat Anda tambahkan dan hapus elemen (biasanya satu per waktu). Perbedaannya hanya itu shift dan unshift tambahkan / hapus elemen di awal Arraysebenarnya bergesering semua elemen lainnya, sementara pop dan push tambahkan / hapus elemen di akhir Array, sehingga menjaga indeks elemen lain.

Contoh:

                      # 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]

45
2017-09-15 14:33



Ini mengambil elemen pertama, menghapusnya dari larik, dan mengembalikan elemen yang dihapus. Ini pada dasarnya cara memperlakukan array seperti tumpukan: shift adalah pop, unshift adalah dorongan.


8
2017-09-15 14:32



Jika Anda dapat menganggap array sebagai seperti antrian nilai yang akan diproses, maka Anda dapat mengambil nilai (depan) berikutnya dan "menggeser" nilai lainnya untuk menempati ruang yang tersedia. unshift menempatkan nilai kembali - mungkin Anda tidak siap untuk memproses beberapa dari mereka, atau akan membiarkan beberapa kode kemudian menanganinya.


2
2017-09-15 15:08



Ini mengembalikan elemen pertama dari array, dan menghapusnya dari array, bergeser elemen kembali satu tempat.

Jadi bergeser [1,2,3,4,5]

kembali 1, dan mengatur array menjadi [2,3,4,5].

Lebih sini.


1
2017-09-15 14:33