removeLast
を呼び出すのは非常に遅いです(77k要素をポップするには数分かかる)。 documentationはO(1)と言いますが、実装では単純に配列のサイズを減らすと思います。明らかではない:swift array removeLast非常に遅い
なぜそれが呼んでいるremove(at: Int)
?
このREPRO場合は、(私はC++のstd::vector
パフォーマンスに慣れている)私は予想よりも遅いですが、私は自分のコードで見ているものとはまだのように遅くない:
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")
これは16秒かかります私のマシンで。同等のC++プログラムには0.002秒かかります。
あなたはこれをテストする方法のコードを投稿することができますか? – Fogmeister
配列は、コピー・オン・ライトする値の型です。だから、 'removeLast'に新しいコピーを作るのは意味があります。しかし、これは速くなければならないと思う人もいます。 –
@Fogmeister私はすべてのコードをダンプすることなく、再プロ用のコードを抜き出しています。私が似たようなテストケースを書くと、速いです。微妙なことが起こっている。 – Taylor