removeLast. documentation, O (1) diyor ve ben uygulamanın basitçe dizi boyutunu azaltacağını düşünürdüm. Anlaşılan değil:hızlı dizi <code>removeLast</code> (bu 77k elemanları patlak için birkaç dakika sürer) son derece yavaş çağrı son derece yavaş
Neden çağırıyor remove(at: Int)
?
daha beklersiniz Bu üreme durum yavaş (ı alışığım C++ 'ın std::vector
performans), ama benim kodunda görüyorum ne kadar hala yavaş değil:
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")
Bu 16 saniye sürer benim makinemde. Eşdeğer bir C++ programı .002 saniye sürüyor.
Bunu test nasıl kod gönderebilir miyim? – Fogmeister
Diziler, yazma üzerine yazılan değer türleridir. Bu yüzden, 'removeLast' üzerinde yeni bir kopya oluşturması mantıklı. Ancak, bunun da hızlı olması gerektiğini düşünürdüm. –
@Fogmeister Tüm kodumu boşaltmadan bir repro için kod çıkarmaya çalışıyorum. Benzer bir test vakası yazdığımda hızlıdır. İnce bir şey oluyor. – Taylor