Gọi removeLast
cực kỳ chậm (phải mất vài phút để tắt 77k phần tử). Các documentation nói O (1) và tôi sẽ nghĩ rằng việc thực hiện sẽ chỉ đơn giản là giảm kích thước mảng. Rõ ràng không:mảng nhanh chóng xóaLoại cực kỳ chậm
Tại sao nó gọi remove(at: Int)
?
trường hợp repro Đây là chậm hơn so với tôi mong chờ (Tôi đã quen với C++ 's std::vector
hiệu suất), nhưng vẫn không chậm như những gì tôi nhìn thấy trong mã của tôi:
var array = [ Int ]()
for i in 0..<262144 {
array.append(i)
}
print ("done appending") // we get here immediately
let n = array.count
for _ in 0..<n {
array.removeLast() // popLast is also slow
}
print ("done")
này có 16 giây trên máy tính của tôi. Một chương trình C++ tương đương mất 0,002 giây.
Bạn có thể gửi mã về cách bạn thử nghiệm này? – Fogmeister
Mảng là loại giá trị sao chép trên ghi. Vì vậy, nó làm cho tinh thần rằng nó làm cho một bản sao mới trên 'removeLast'. Tuy nhiên người ta sẽ nghĩ rằng điều này cũng nên nhanh. –
@ Fogmeister Tôi đang cố gắng rút ra một số mã cho một repro mà không cần phải bán tất cả các mã của tôi. Khi tôi viết một trường hợp thử nghiệm tương tự, nó nhanh. Một cái gì đó tinh tế đang xảy ra. – Taylor