Bagaimana cara mendapatkan elemen terakhir dari slice?


167

Apa cara Go untuk mengekstraksi elemen terakhir dari slice?

var slice []int

slice = append(slice, 2)
slice = append(slice, 7)

slice[len(slice)-1:][0] // Retrieves the last element

Solusi di atas berfungsi, tetapi tampaknya aneh.

Jawaban:


297

Untuk hanya membaca elemen terakhir dari sepotong:

sl[len(sl)-1]

Untuk menghapusnya:

sl = sl[:len(sl)-1]

Lihat halaman ini tentang trik irisan


34
Terima kasih banyak! Meskipun kelihatannya konyol mereka tidak menambahkan -1indeks yang Python miliki ...
Morgan Wilde

3
Saya memang suka -1dari Python, meskipun sering menyebabkan kesalahan debug sulit.
weberc2

11
Mereka meninggalkannya di luar dengan sadar. Itu tidak jelas dan rentan terhadap kesalahan. Go keseluruhan adalah berhati-hati tentang 'terlalu banyak makna'; itu juga tidak menampilkan metode / overloading operator, nilai default untuk params fungsi, dll. yang IMHO masuk dalam nada filosofis yang sama. Lihat diskusi ini dan yang lainnya: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Toni Cárdenas

2
Saya tidak yakin tapi aku panic: runtime error: index out of rangeuntuk profiles[len(profiles)-1].UserId, saya kira panjang slice adalah 0 sehingga panik?
tom10271

@ tom10271 Ya, Anda tidak bisa mendapatkan elemen terakhir dari slice jika tidak ada elemen seperti itu, yaitu. jika tidak ada elemen sama sekali.
Toni Cárdenas

-10

Agak kurang elegan tetapi juga bisa:

sl[len(sl)-1: len(sl)]

3
Itu sama dengan sl[len(sl)-1:], tapi itu mengembalikan sepotong yang mengandung elemen terakhir, bukan hanya elemen terakhir. play.golang.org/p/kcThrqa-64c
Victor
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.