如何在Swift中缩小数组

5

在 Swift 中,数组的大小可以根据需要动态增长,但似乎无法缩小。

var x: [Int] = []
for i in 0...1000 {
    x.append(i)
}
for i in reverse(1000...0) {
    x.removeAtIndex(0)
}
< p > x 的容量仍然很大。我也尝试过使用 removeLast() 并将其复制到一个新变量中,但似乎并没有减少容量。


你想缩小数组容量有什么特别的原因吗? - Sebastian Dressler
@SebastianDressler 如果留下一个不必要的大容量,会浪费内存消耗吗? - BenMQ
从技术上讲是可以的,但我认为(虽然不完全确定实现细节),这种行为背后有一些逻辑。例如,如果您决定再次重新调整大小它,系统就不必再次分配内存。另一方面,在某些特定大小时,它可能会缩小容量。 - Sebastian Dressler
2个回答

4

重置容量,请使用.removeAll(keepCapacity: false)

var x: [Int] = []
for i in 0...1000 {
    x.append(i)
}

x.capacity // -> 1,532
x.removeAll(keepCapacity: false)
x.capacity // -> 0

如果您想在优化容量后保留元素,则可以使用Array()构造函数进行复制:

for i in 0...1000 {
    x.append(i)
}
for i in reverse(0...999) {
    x.removeAtIndex(0)
}
x.capacity // -> 1532
x = Array(x) // -> [1000]
x.capacity // -> 2

0

数组分配的内存大小的增加/减少是运行时内存管理的一部分。当数组中存储的元素数量减少时,内存分配可能受益于不直接释放内存。例如,可能会发生这样的情况,即在删除元素后,新元素被添加到数组中。在这种情况下,需要分配新的内存。

还要区分countcapacity之间的区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接