在Rust中,在容器中的每个值之间打印内容的最佳方法是什么?

Mic*_*Day 4 rust

我想打印用逗号分隔的向量中的每个项目.您可以使用数字索引:

for i in 0..vec.len() {
    print!("{}", vec[i]);
    if i < vec.len() - 1 {
        print!(", ");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果你只有一个Iterator?您需要特别处理第一个或最后一个值,或者创建一个自定义迭代器,这似乎很多工作.

在Rust中有一种更清洁惯用的表达方式吗?

Lev*_*ans 8

如果要避免使用变量来检查元素是否为第一个,则可以使用迭代器的方法.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)


She*_*ter 8

您可以对第一个元素做一些特殊的事情,然后对所有后续元素进行相同的处理:

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)


Chr*_*gan 4

let first = true;
for item in iterator {
    if !first {
        print(", ");
    }
    print(item);
    first = false;
}
Run Code Online (Sandbox Code Playgroud)