如何转换Vec <vec <f64>&gt;成一个字符串

时间:2016-03-20 08:48:47

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

2 个答案:

答案 0 :(得分:6)

标准库中确实存在<% java.sql.Connection Conn = DBconnector.SetDBConnection(); /* make connector as you make in your code */ Statement st = null; ResultSet rs = null; st = Conn.createStatement(); rs = st.executeQuery("select * from department"); %> <tr> <td> Student Major : <select name ="Major"> <%while(rs.next()){ %> <option value="<%=rs.getString(1)%>"><%=rs.getString(1)%></option> <%}%> </select> </td> ,但它并不是非常有用(通常需要额外的分配)。但是你可以在这里找到解决方案:

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

crate itertools为迭代器定义了一个join方法,可以像这样应用:

join

为了避免使用任何命名功能,您当然可以手动执行:

for row in vec {
    let line = row.iter().join("\t");
    println!("{}", line);
}

答案 1 :(得分:4)

除了来自join的{​​{1}}之外,您总是可以在迭代器上使用itertools(这非常有用),如下所示:

fold