Como obter o último elemento de uma fatia?

167

Qual é o caminho a seguir para extrair o último elemento de uma fatia?

var slice []int

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

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

A solução acima funciona, mas parece estranha.

Morgan Wilde
fonte

Respostas:

297

Para apenas ler o último elemento de uma fatia:

sl[len(sl)-1]

Para removê-lo:

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

Veja esta página sobre truques de fatia

Toni Cárdenas
fonte
34
Muitíssimo obrigado! Mesmo que parece bobo eles não adicionar o -1índice Python tem ...
Morgan Wilde
3
Eu gosto -1do Python, embora muitas vezes leve a erros difíceis de depurar.
weberc2
11
Eles deixaram isso de fora conscientemente. Não era óbvio e propenso a erros. Ir em geral é cauteloso quanto a "muito significado"; Ele também não apresenta sobrecarga de método / operador, valores padrão para parâmetros de função, etc., que IMHO segue em uma linha filosófica semelhante. Veja esta discussão e outras: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Toni Cárdenas
2
Eu não tenho certeza, mas eu tenho panic: runtime error: index out of rangepara profiles[len(profiles)-1].UserId, eu acho que o comprimento do slice é 0 para que ele entra em pânico?
precisa saber é o seguinte
@ tom10271 Sim, você não pode obter o último elemento de uma fatia se não houver esse elemento, ou seja. se não houver elementos.
Toni Cárdenas
-10

Um pouco menos elegante, mas também pode fazer:

sl[len(sl)-1: len(sl)]
ccdrm
fonte
3
É o mesmo que sl[len(sl)-1:], mas que retorna uma fatia que contém o último elemento, em vez de apenas o último elemento. play.golang.org/p/kcThrqa-64c
Victor