Làm cách nào để tìm nạp phần tử cuối cùng của một mảng trong Swift?


81

Tôi có thể làm điều này:

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

nhưng chắc chắn có một cách đẹp hơn?


Có gì sai với cách đó? Có lẽ, bạn có thể cung cấp tiện ích mở rộng của riêng mình để thêm phương thức ".lastElement".
Thilo

7
Không có gì là sai với nó ngoại trừ nó xấu xí.
joseph.hainline

1
Có thể không sai nhưng dễ mắc lỗi một lần. Tôi sẽ viết một phần mở rộng như đã đề cập trong các câu trả lời.
thestoneage

Tôi đã hy vọng Swift có lastIndexvar, có sẵn trong Kotlin. Có vẻ như bây giờ tôi phải gắn bó với endIndex - 1nó.
aldok

Câu trả lời:


87

Cập nhật: Swift 2.0 hiện đã bao gồm first:T?last:T?các thuộc tính được tích hợp sẵn.


Khi cần, bạn có thể làm cho Swift API tích hợp sẵn đẹp hơn bằng cách cung cấp các tiện ích mở rộng của riêng bạn, ví dụ:

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

Điều này cho phép bạn bây giờ truy cập phần tử cuối cùng trên bất kỳ mảng nào với:

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

Cảm ơn! BTW, endIndexkhông cần phải được tham chiếu qua self.
Rudolf Adamkovič

14
Kể từ Xcode6-Beta5, thuộc lasttính được tích hợp sẵn (nguyên trạng first). Nó trả về nilnếu mảng trống.
Pang

2
Vấn đề với việc triển khai này là nó sẽ sập nếu Mảng trống.
Luca Angeletti

5
Nếu bạn không phải là lần đầu tiên bạn cuối cùng - Ricky Bobby
Kevin Burandt

1
bạn không cần điều này nữa trong Swift 3. Xem bên dưới để có câu trả lời tốt hơn. .last là nội trang.
sww314

101

Như beta5bây giờ có một firstlasttài sản

Ngoài Array có được đầu tiên và cuối cùng, các tập hợp lười biếng cũng triển khai đầu tiên (và cuối cùng nếu chúng có thể lập chỉ mục hai chiều), cũng như isEmpty.


8
rất vui nếu bao gồm một liên kết đến tài liệu này
tim peterson

1
đừng nói với tôi, hãy nói với @ joseph.hainline :)
Erik Aigner

Sẽ rất hay với một ví dụ
KML

Cám ơn vì cái này! Điều thú vị là, mẫu chính / chi tiết iOS 10 trong Xcode 8.3.3 vẫn sử dụng mã có dạng x [x.count-1] - nhưng dài hơn NHIỀU - thay vì x.last.
Glenn

23

Bạn có thể tìm nạp phần tử cuối cùng của Mảng bằng cách sử dụng thuộc lasttính.

Mã:

let lastElement = yourArray.last

9

Bạn cũng có thể lấy và xóa phần tử cuối cùng khỏi mảng
removeLast()

Thí dụ:

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

Lấy từ tài liệu của Apple (nguồn này đã hết hạn nhưng bạn có thể tìm thấy các ví dụ trong trang tài liệu này )


1
Không giống như tính năng objC removeLast, Swift 4 không đủ thông minh để biết nếu không còn phần tử nào trong mảng và sẽ bị lỗi nếu thử trên một mảng trống.
JScarry


1

chỉnh sửa cho nhanh 2.2

extension Array {
    var last: Element {
        return self[self.endIndex - 1]
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.