IOS 学习

swift 集合类型中的 capacity

2023-01-17  本文已影响0人  hiasyou

swift 的集合有 capacity 属性,代表集合的“容量”

capacity 于 count 是不同的虽然有时候他们的值是一样的.

官方文档中 capacity 的描述

var capacity: Int { get }

var numbers = [10, 20, 30, 40, 50]
// numbers.count == 5
// numbers.capacity == 5

numbers.append(contentsOf: stride(from: 60, through: 100, by: 10))
// numbers.count == 10
// numbers.capacity == 10

我们可以清晰的看到 capacity的初始值来源于数组的初始化.

之后对数组增加元素 capacity 随之变化

但是不够全面:

1:capacity 的增加是 翻倍的 即 “ x 2” 的增加
2:capacity 的容量不会随 数组的删除而缩小 注意 “3”
3:capacity 会随数组的清零而清零

举例子:

var numbers = [10, 20, 30, 40, 50]
// numbers.count == 5
// numbers.capacity == 5 /*初始化获得5*/
print(numbers.capacity)
print(numbers.count)

numbers.append(contentsOf: stride(from: 60, through: 100, by: 10))
// numbers.count == 10
// numbers.capacity == 10
print("--------------------------------------------")
print("capacity = \(numbers.capacity)")
print("count = \(numbers.count)")
print("numbers= \(numbers)")

print("--------------------------------------------")
numbers.append(100)
numbers.append(110)
print("capacity = \(numbers.capacity)")
print("count = \(numbers.count)")
print("numbers= \(numbers)")

print("--------------------------------------------")
numbers.removeSubrange(1..<3)
print("capacity = \(numbers.capacity)")
print("count = \(numbers.count)")
print("numbers= \(numbers)")

print("--------------------------------------------")
numbers.removeAll()
print("capacity = \(numbers.capacity)")
print("count = \(numbers.count)")
print("numbers= \(numbers)")

//控制台
--------------------------------------------
capacity = 10
count = 10
numbers= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
--------------------------------------------
capacity = 20
count = 12
numbers= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 100, 110]
--------------------------------------------
capacity = 20
count = 10
numbers= [10, 40, 50, 60, 70, 80, 90, 100, 100, 110]
--------------------------------------------
capacity = 0
count = 0
numbers= []

以上就是个人对 capacity的理解,但是并不清楚他有什么具体的作用...

更深的思考capacity的分配是否占用内存, 如果是的话:是否要根据自己数据的样本来分配合适的大小来更加节省“空间”

上一篇下一篇

猜你喜欢

热点阅读