Saya mengalami kesulitan memahami apa yang dilakukan metode shift dan unshift dari kelas Array di Ruby. Adakah yang bisa membantu saya memahami apa yang mereka lakukan?
pushitu di atas, dan shiftkeluar di ujung lainnya.
Saya mengalami kesulitan memahami apa yang dilakukan metode shift dan unshift dari kelas Array di Ruby. Adakah yang bisa membantu saya memahami apa yang mereka lakukan?
pushitu di atas, dan shiftkeluar di ujung lainnya.
Jawaban:
Melihat 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 diberikan ke depan larik, memindahkan semua elemen lainnya ke atas satu
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
shiftdan unshiftbertindak seperti tumpukan FILO, pushdan shiftakan bertindak seperti antrian FIFO, kecuali saya bingung tentang sesuatu.
shiftdan unshiftbertindak dengan cara yang sama seperti popdan push: mereka dimaksudkan untuk menggunakan array sebagai tumpukan yang Anda dapat menambahkan dan menghapus elemen (biasanya satu per waktu). Perbedaannya hanya itu shiftdan unshiftmenambah / menghapus elemen di awal Array, sebenarnya menggeser semua elemen lainnya, sedangkan popdan pushmenambah / menghapus elemen di akhir Array, sehingga mempertahankan indeks elemen lainnya.
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]
Itu mengambil elemen pertama, menghapusnya dari array, dan mengembalikan elemen yang dihapus. Ini pada dasarnya adalah cara untuk memperlakukan array seperti tumpukan: shiftis pop, unshiftis push.
popdan pushjuga merupakan Arraymetode, kebingungan tidak boleh dibuat. :-)
Jika Anda dapat menganggap array sebagai antrian nilai yang akan diproses, maka Anda dapat mengambil nilai berikutnya (depan) dan "menggeser" nilai lainnya untuk menempati ruang yang tersedia. unshift memasukkan kembali nilai - mungkin Anda belum siap untuk memproses beberapa di antaranya, atau akan membiarkan kode lain menanganinya.
shift/unshiftsepertipush/popdi ujung lain larik, Anda dapat secara mental membuang 'f' dari nama metode untuk mengingat elemen 'membuang' yang mana dan mana yang 'menyisipkan'. :)