作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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");
}
}
最佳答案
标准库中确实有一个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);
}
}
问题是这个join
只适用于切片而不适用于迭代器。我们必须先将所有元素转换为字符串,将结果收集到一个新向量中,然后才能使用 join
。
crate itertools
为迭代器定义了一个 join
方法,可以像这样应用:
for row in vec {
let line = row.iter().join("\t");
println!("{}", line);
}
为了避免使用任何指定的功能,您当然可以手动完成:
for row in vec {
if let Some(first) = row.get(0) {
print!("{}", first);
}
for col in row.iter().skip(1) {
print!("\t{}", col);
}
println!("");
}
关于string - 如何将 Vec<Vec<f64>> 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36111784/
我是一名优秀的程序员,十分优秀!