我是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");
}
}
答案 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