我想打印用逗号分隔的向量中的每个项目.您可以使用数字索引:
for i in 0..vec.len() {
print!("{}", vec[i]);
if i < vec.len() - 1 {
print!(", ");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果你只有一个Iterator?您需要特别处理第一个或最后一个值,或者创建一个自定义迭代器,这似乎很多工作.
在Rust中有一种更清洁惯用的表达方式吗?
如果要避免使用变量来检查元素是否为第一个,则可以使用迭代器的方法.take()和.skip()方法:
for e in vec.iter().take(1) {
print!("{}", e);
}
for e in vec.iter().skip(1) {
print!(", {}", e);
}
Run Code Online (Sandbox Code Playgroud)
或折叠全部:
vec.iter().fold(true, |first, elem| {
if !first { print(", "); }
print(elem);
false
});
Run Code Online (Sandbox Code Playgroud)
您可以对第一个元素做一些特殊的事情,然后对所有后续元素进行相同的处理:
let mut iter = vec.iter();
if let Some(item) = iter.next() {
print!("{}", item);
for item in iter {
print!("<separator>{}", item);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用Itertools::format,则更容易:
println!("{}", vec.iter().format("<separator>"));
Run Code Online (Sandbox Code Playgroud)
let first = true;
for item in iterator {
if !first {
print(", ");
}
print(item);
first = false;
}
Run Code Online (Sandbox Code Playgroud)