Як отримати останній елемент зрізу?


167

Який спосіб вилучити останній елемент фрагмента?

var slice []int

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

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

Рішення вище працює, але здається незручним.

Відповіді:


297

Для простого читання останнього елемента фрагмента:

sl[len(sl)-1]

Для його видалення:

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

Дивіться цю сторінку про трюки з фрагментами


34
Дякую купу! Незважаючи на те, що це здається дурним, вони не додали -1індекс, який Python має ...
Morgan Wilde

3
Мені подобається -1Python, хоча це часто призводить до важких помилок.
weberc2

11
Вони залишили його зовні свідомо. Це було не очевидно і схильне до помилок. Загальне розуміння - «занадто багато сенсу»; він також не містить методу / перевантаження оператора, значень за замовчуванням для функцій парами тощо. Дивіться цю дискусію та інші: groups.google.com/forum/#!topic/golang-nuts/yn9Q6HhgWi0
Тоні Карденас

2
Я не впевнений , але я panic: runtime error: index out of rangeза profiles[len(profiles)-1].UserId, я думаю , довжина зрізу становить 0 так що це панікує?
tom10271

@ tom10271 Так, ви не можете отримати останній елемент фрагмента, якщо такого елемента немає, тобто якщо елементів взагалі немає.
Тоні Карденас

-10

Трохи менш елегантний, але також може:

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

3
Це те саме, що sl[len(sl)-1:], але це повертає фрагмент, що містить останній елемент, а не лише останній елемент. play.golang.org/p/kcThrqa-64c
Віктор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.