如何在swift中缩小数组

如何在swift中缩小数组,swift,Swift,swift中的数组可以根据大小动态增长,但看起来并没有缩小 var x: [Int] = [] for i in 0...1000 { x.append(i) } for i in reverse(1000...0) { x.removeAtIndex(0) } x的容量仍然很大。我还尝试了removeLast()并将其复制到一个新变量,但似乎没有减少容量。数组分配的内存的增长/收缩是运行时内存管理的一部分。当数组中存储的元素数量减少时,不直接取消分配内存可能会有利于内存分配。

swift中的数组可以根据大小动态增长,但看起来并没有缩小

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

x
的容量仍然很大。我还尝试了
removeLast()
并将其复制到一个新变量,但似乎没有减少容量。

数组分配的内存的增长/收缩是运行时内存管理的一部分。当数组中存储的元素数量减少时,不直接取消分配内存可能会有利于内存分配。例如,在删除元素后,可能会向数组中添加新元素。在这种情况下,需要分配新内存

计数
容量
之间也有区别

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

如果要在优化
容量后保留元素
,请使用
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

您想缩减阵列容量有什么特别的原因吗?@SebastianDressler会留下不必要的大容量浪费内存消耗?从技术上讲是的,但我认为(尽管不能完全确定实现细节),这种行为背后有一些逻辑。例如,如果您决定再次重新调整大小,则系统无需再次分配内存。另一方面,在某些特定的尺寸下,它可能会缩小容量。
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