gpt4 book ai didi

arrays - Swift 数组非常慢(在字典中使用时)

转载 作者:搜寻专家 更新时间:2023-10-31 23:06:49 24 4
gpt4 key购买 nike

我在 Swift 中处理非常大的数组,并得出结论,向其中添加元素时,这些数组非常慢。

我主要在 Dictionary 中使用数组时观察到这些问题。

ex : var array = [String : [String]]

因此我决定使用 playground 对一个非常简单的 array 测试进行基准测试,认为问题来自 array 本身:

var arr = [Int]()

for i in 0..<1_000_000 {
arr.append(i)
}

此代码需要很长时间才能完成。现在,在 C# 中使用真正的 List 编写相同的代码,甚至不需要 second

IList list = new List<int>();

for (int i = 0; i < 1000000; i++) {
list.Add(i);
}

我知道 Swift 中的数组不像其他语言中的列表那样可以灵活地选择 ArrayListLinkedList。 Swift,每次添加新元素时都会重新分配,并且基本上将所有数组放在一些更新的更大空间中。

我们如何解决这个问题?

编辑 1: Hamish 指出,使用 Xcode Playground 环境对于性能跟踪来说是一个糟糕的主意。他是对的,如果不在 Playground 中使用,Swift arrays 和 C# 一样快。

编辑 2:arrays 的性能问题不是因为 array 本身,而是仅在使用 arrays 在字典中。请参阅下面的答案。

最佳答案

这个问题主要是因为 .append 函数必须创建位置然后填充它,

如果你知道数组的大小,你可以稍微快一点,给它一个大小,然后为它分配空间,而不是创建分配然后填充它尝试这段代码让我得到了稍微快一点的结果。

var arr = [Int].init(repeating: 0, count: 1_000_000)

for i in 0..<1_000_000 {
arr[i] = i
}

这是使用 playground,但是与 command-line 工具或实际项目相比,playground 的性能非常慢,但是这段代码在 Playground 上稍微快一些。

关于arrays - Swift 数组非常慢(在字典中使用时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52807259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com