¿Cómo obtener el último elemento de una rebanada?


167

¿Cuál es la forma Go para extraer el último elemento de un segmento?

var slice []int

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

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

La solución anterior funciona, pero parece incómoda.

Respuestas:


297

Por solo leer el último elemento de un segmento:

sl[len(sl)-1]

Para quitarlo:

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

Ver esta página sobre trucos de corte


34
¡Gracias un montón! Aunque parezca una tontería, no agregaron el -1índice que Python tiene ...
Morgan Wilde

3
Me gusta el -1de Python, aunque a menudo conduce a errores difíciles de depurar.
weberc2

11
Lo dejaron afuera conscientemente. No era obvio y propenso a errores. Ir en general es circunspecto sobre 'demasiado significado'; tampoco presenta sobrecarga de método / operador, valores predeterminados para parámetros de función, etc., que en mi humilde opinión va en una línea filosófica similar. Vea esta discusión y otras: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Toni Cárdenas

2
No estoy seguro, pero tengo panic: runtime error: index out of rangepara profiles[len(profiles)-1].UserId, supongo que la longitud de la porción es 0 por lo que entra en pánico?
tom10271

@ tom10271 Sí, no puede obtener el último elemento de un segmento si no existe dicho elemento, es decir. si no hay elementos en absoluto.
Toni Cárdenas

-10

Poco menos elegante pero también puede hacer:

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

3
Es lo mismo que sl[len(sl)-1:], pero eso devuelve un segmento que contiene el último elemento, en lugar de solo el último elemento. play.golang.org/p/kcThrqa-64c
Victor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.