I have an implementation in a Rust struct that builds a very large string that will ultimately be written to a file. I wondered if this could be sped up by ensuring the string variable has the appropriate capacity, but it doesn't work in the way I expected.
Here's what I did:
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)
});
I thought that the string would be accumulated into the first argument, so I instantiated it with the necessary capacity. However, by checking the capacity of the string that is output from this (sum), I can see that my assumptions were wrong.
Can someone help me understand the way in which my understanding of fold is wrong? And perhaps give a hint as to a better way to do build this string?
Using
format!will always produce a newString. Instead you canwrite!to the existing string:Make sure to import
std::fmt::Writeas well.