нагуглил только такое:
fn reverse_words(s: &str) -> String {
s.split_whitespace().rev().collect::<Vec<&str>>().join(" ")
}
но тут лишний вектор создается в куче. мой вариант, без лишней аллокации:
fn reverse_words(str: &str) -> String {
let mut iter = str.split_whitespace().rev();
if let Some(x) = iter.next() {
let mut result = String::with_capacity(str.len());
result += x;
for x in iter {
result += " ";
result += x;
}
result
} else {
String::new()
}
}
как сделать кратко и эффективно? заодно если расскажете, как можно сократить лапшу if let с итератором, будет вообще прекрасно