Rust:使用折叠构建字符串,并希望通过分配正确的容量来加快速度

问题描述 投票:0回答:1

我在 Rust 结构中有一个实现,它构建了一个非常大的字符串,最终将写入文件。我想知道是否可以通过确保 String 变量具有适当的容量来加快速度,但它并没有按照我预期的方式工作。

这就是我所做的:

let sum = izip!(self.ts, self.x, self.y).fold(String::with_capacity(capacity), |acc, x| {
            format!("{}{}, {}, {}\n", acc, x.0, x.1, x.2)
        });

我认为字符串会累积到第一个参数中,所以我用必要的容量实例化了它。然而,通过检查由此输出的字符串的容量(

sum
),我可以发现我的假设是错误的。

有人可以帮助我理解我对

fold
的理解是错误的吗?也许还可以提示构建此字符串的更好方法?

谢谢。

rust fold pre-allocation
1个回答
3
投票

使用

format!
总是会产生一个新的
String
。相反,您可以
write!
到现有字符串:

let sum = izip!(self.ts, self.x, self.y).fold(String::with_capacity(capacity), |mut acc, x| {
    let _ = write!(acc, "{}, {}, {}\n", x.0, x.1, x.2);
    acc
});

确保同时导入

std::fmt::Write

© www.soinside.com 2019 - 2024. All rights reserved.