Comment obtenir le dernier élément d'une tranche?

167

Quelle est la méthode Go pour extraire le dernier élément d'une tranche?

var slice []int

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

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

La solution ci-dessus fonctionne, mais semble maladroite.

Morgan Wilde
la source

Réponses:

297

Pour lire simplement le dernier élément d'une tranche:

sl[len(sl)-1]

Pour le supprimer:

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

Voir cette page sur les trucs de tranche

Toni Cárdenas
la source
34
Merci beaucoup! Même si cela semble ridicule, ils n'ont pas ajouté l' -1indice que Python a ...
Morgan Wilde
3
J'aime bien le -1de Python, même si cela conduit souvent à des erreurs difficiles à déboguer.
weberc2
11
Ils l'ont laissé dehors consciemment. Ce n'était pas évident et sujet aux erreurs. Go globalement est circonspect quant à «trop de sens»; il ne comporte pas non plus de surcharge de méthode / opérateur, de valeurs par défaut pour les paramètres de fonction, etc., ce que IMHO va dans une veine philosophique similaire. Voir cette discussion et d'autres: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Toni Cárdenas
2
Je ne suis pas sûr mais j'ai obtenu panic: runtime error: index out of rangepour profiles[len(profiles)-1].UserId, je suppose que la longueur de la tranche est de 0 donc ça panique?
tom10271
@ tom10271 Oui, vous ne pouvez pas obtenir le dernier élément d'une tranche s'il n'y en a pas, ie. s'il n'y a aucun élément.
Toni Cárdenas
-10

Un peu moins élégant mais peut aussi faire:

sl[len(sl)-1: len(sl)]
ccdrm
la source
3
C'est la même chose que sl[len(sl)-1:], mais cela renvoie une tranche contenant le dernier élément, plutôt que juste le dernier élément. play.golang.org/p/kcThrqa-64c
Victor