我在 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
的理解是错误的吗?也许还可以提示构建此字符串的更好方法?
谢谢。
使用
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
。