gpt4 book ai didi

swift - 在 swift 中快速添加字符串

转载 作者:行者123 更新时间:2023-11-28 12:44:22 24 4
gpt4 key购买 nike

下面的代码显示了两种构建电子表格的方法:通过使用:

str = str + "\(number) ; "

str.append("\(number)");

两者都非常慢,因为我认为,它们丢弃了两个字符串并创建了第三个字符串,这是前两个字符串的串联。现在,如果我重复此操作数十万次来增加电子表格...这会产生大量分配。

例如,下面的代码在我的 MacBook Pro 2016 上执行需要 11 秒:

    let start = Date()
var str = "";

for i in 0 ..< 86400
{
for j in 0 ..< 80
{
// Use either one, no difference
// str = str + "\(Double(j) * 1.23456789086756 + Double(i)) ; "
str.append("\(Double(j) * 1.23456789086756 + Double(i)) ; ");
}

str.append("\n")
}

let duration = Date().timeIntervalSinceReferenceDate - start.timeIntervalSinceReferenceDate;
print(duration);

如何在不必自己将 double 转换为字符串的情况下解决此问题?我已经坚持了 3 天...我的编程技能非常有限,您可能从上面的代码中可以看出...

我试过:

var str = NSMutableString(capacity: 86400*80*20);

但是编译器告诉我:

Variable 'str' was never mutated; consider changing to 'let' constant

尽管

str.append("\(Double(j) * 1.23456789086756 + Double(i)) ; ");

很显然,调用 append 不会改变字符串...

最佳答案

我尝试将其写入数组,但限制因素似乎是将 double 型转换为字符串。

下面的代码在我的广播中需要 13 秒左右

这样做

arr[i][j] = "1.23456789086756"

将执行时间缩短为 2 秒,因此将 Double 转换为 String 需要 11 秒。您可以通过编写自己的转换例程来节省一些时间,但这似乎是限制因素。我尝试使用内存流,但似乎更慢。

 var start = Date()

var arr = Array(repeating: Array(repeating: "1.23456789086756", count: 80), count: 86400 )
var duration = Date().timeIntervalSinceReferenceDate - start.timeIntervalSinceReferenceDate;
print(duration); //0.007
start = Date()

var a = 1.23456789086756

for i in 0 ..< 86400
{
for j in 0 ..< 80
{
arr[i][j] = "\(a)" // "1.23456789086756" //String(a)
}
}

duration = Date().timeIntervalSinceReferenceDate - start.timeIntervalSinceReferenceDate;
print(duration); //13.46 or 2.3 with the string

关于swift - 在 swift 中快速添加字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551415/

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