Man*_*gor 3 string vector rust
我是Rust的新手,我正在努力完成一项简单的任务.我想将矩阵转换为字符串,字段由制表符分隔.我认为这可以通过使用map函数或类似的东西,但现在无论我尝试什么给我一个错误.
这就是我所拥有的,我想将该col部分转换为函数,它返回一个制表符分隔的字符串,我可以打印它.在Python中,这就像是row.join("\t").Rust中有类似的东西吗?
fn print_matrix(vec: &Vec<Vec<f64>>) {
for row in vec.iter() {
for col in row.iter() {
print!("\t{:?}",col);
}
println!("\n");
}
}
Run Code Online (Sandbox Code Playgroud)
join标准库中确实有一个,但它并不是非常有用(通常需要额外的分配).但你可以在这里看到一个解决方案:
fn print_matrix(vec: &Vec<Vec<f64>>) {
for row in vec {
let cols_str: Vec<_> = row.iter().map(ToString::to_string).collect();
let line = cols_str.join("\t");
println!("{}", line);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是这join适用于切片而不是迭代器.我们必须首先将所有元素转换为字符串,将结果收集到新的向量中然后才能使用join.
crate itertools定义了join迭代器的方法,可以这样应用:
for row in vec {
let line = row.iter().join("\t");
println!("{}", line);
}
Run Code Online (Sandbox Code Playgroud)
并且为了避免使用任何命名功能,您当然可以手动执行:
for row in vec {
if let Some(first) = row.get(0) {
print!("{}", first);
}
for col in row.iter().skip(1) {
print!("\t{}", col);
}
println!("");
}
Run Code Online (Sandbox Code Playgroud)