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


81

Я можу зробити це:

var a = [1,5,7,9,22]
a.count               // 5
a[a.count - 1]        // 22
a[a.endIndex - 1]     // 22

але, звичайно, є кращий спосіб?


Що поганого в цьому шляху? Імовірно, ви можете надати власне розширення, щоб додати метод ".lastElement".
Тіло

7
З ним нічого поганого немає, крім того, що це негарно.
joseph.hainline

1
Можливо, не неправильно, але схильне до одноразових помилок. Я б написав розширення, як зазначено у відповідях.
thestoneage

Я сподівався, що Swift має lastIndexvar, який доступний у Kotlin. Здається, мені поки що доведеться дотримуватися endIndex - 1.
aldok

Відповіді:


87

Оновлення: Swift 2.0 тепер включає first:T?та last:T?вбудовані властивості.


Коли вам потрібно, ви можете зробити вбудований API Swift гарнішим, надавши власні розширення, наприклад:

extension Array {
    var last: T {
        return self[self.endIndex - 1]
    }
}

Тепер ви можете отримати доступ до останнього елемента будь-якого масиву за допомогою:

[1,5,7,9,22].last

Дякую! До речі, endIndexне потрібно посилатися через self.
Рудольф Адамкович

14
Станом на Xcode6-Beta5 lastвластивість вбудована (як є first). Він повертається, nilякщо масив порожній.
Панг

2
Проблема цієї реалізації полягає в тому, що вона дійсно аварійно завершує роботу, якщо масив порожній.
Luca Angeletti

5
Якщо ти не перший, то останній - Рікі Боббі
Кевін Бурандт

1
вам це більше не потрібно в Swift 3. Для кращих відповідей див. нижче. . остання вбудована.
sww314

101

Станом на beta5зараз є firstі lastвласність

На додаток до отримання масиву Array першим і останнім, ліниві колекції також реалізують first (і останній, якщо вони можуть індексувати двонаправлено), а також isEmpty.


8
було б непогано включити посилання на цю документацію
tim peterson

1
не кажи мені, скажи @ joseph.hainline :)
Ерік Айгнер

Було б непогано з прикладом
KML

Дякую за це! Цікаво, що шаблон основного / детального опису iOS 10 у Xcode 8.3.3 все ще використовує код форми x [x.count-1] - але НАБАГАТО довший, а не x.last.
Гленн,

23

Ви можете отримати останній елемент масиву, використовуючи lastвластивість.

Код:

let lastElement = yourArray.last

9

Ви також можете отримати та видалити останній елемент із масиву
removeLast()

Приклад:

var array = [1, 2, 3]
let removed = array.removeLast()
// array is [1, 2]
// removed is 3

Взято з документів Apple (це джерело минуло, але приклади можна знайти на цій сторінці документації )


1
На відміну від функції ObjC removeLast, Swift 4 недостатньо розумний, щоб знати, чи не залишилося елементів у масиві, і він сбіється, якщо спробувати на порожньому масиві.
JScarry


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.