string - 如何将 Vec<Vec<f64>> 转换为字符串

标签 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");
    }
}

最佳答案

标准库中确实有一个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/

相关文章:

c - strncpy() 段错误 : shady strtok() manipulations?

c++ - 如何将 unique_ptr 参数推回共享指针的 vector

c++ - 在两个坐标空间之间变换对象

c++ - 除了使用设计选择之外,是否不允许访问类型不同的数组元素?

rust - 类型别名引入错误 : "cast requires that ` *variable *` is borrowed for ` 'static`"

rust - 在 Rust 中创建一个连接 HashMap 键的字符串

ios - 有没有办法在 swift 中用反斜杠替换双引号

Java String split() 丢失字符串

string - 如何在VB6中访问字符串的各个字符

c++ - 重载 << 并定义流操纵器 C++