gpt4 book ai didi

arrays - SwiftUI 大数组(超过 3 万个元素)需要永远迭代

转载 作者:行者123 更新时间:2023-12-04 12:28:59 25 4
gpt4 key购买 nike

我对发生了什么感到很困惑,但基本上,这是我的代码。也许我只是愚蠢或在 swift 之上做得不够,但我觉得这应该花不到一秒钟的时间,但是迭代需要很长时间(我添加了 CFAbsoluteTimeGetCurrent)因为我想看看每个任务需要多长时间花费了,他们每个花费了大约 0.0008949041366577148 秒,但是在 30K 的跨度上显然加起来了。这只是测试代码,但我真正想做的是在 Swift 中使用单个链接实现凝聚聚类,起初我认为我的算法写得不好,但后来我只是尝试迭代这样的数组,它仍然花了很长时间。有谁知道怎么回事?
我也知道在控制台中打印语句需要时间,但即使删除这些语句后,onAppear 关闭仍然需要一段时间才能完成。
也很抱歉,这是我第一次在 Stack Overflow 上发帖,所以如果我将来是否应该以某种方式写我的帖子,请告诉我。

    @State private var mat: [Double?] = Array(repeating: nil, count: 30000)

var body: some View {
Text("HELLo")
.onAppear() {
for i in 0..<matrix.count {
let start = CFAbsoluteTimeGetCurrent()
mat[i] = 0
let diff = CFAbsoluteTimeGetCurrent() - start
print("HAC_SINGLELINK.init TIME: \(diff), ROW \(i) of \(matrix.count)")
}

}
}

最佳答案

我相信时间是由你对你的@State所做的修改次数造成的。变量,这会导致大量开销。
使用您的初始代码,在我的机器上,大约需要 16 秒。使用我修改后的代码,它对临时非状态变量进行所有修改,然后分配给 @State一次,需要 0.004 秒:

.onAppear() {
let start = CFAbsoluteTimeGetCurrent()

var temp = matrix

for i in 0..<temp.count {
temp[i] = 0
}
let diff = CFAbsoluteTimeGetCurrent() - start

matrix = temp

print("HAC_SINGLELINK.init TIME: \(diff) \(matrix.count)")

}

关于arrays - SwiftUI 大数组(超过 3 万个元素)需要永远迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68109345/

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