我正在尝试完成一些相当简单的事情,但不知道如何在 Rust 中做到这一点。
我有一个 Vec<&Vec>,类似于下面的示例。
[
["a1", "b2", "c3"],
["d1", "e2", "f3"],
["g1", "h2", "i3"]
]
Run Code Online (Sandbox Code Playgroud)
我想在每个向量的末尾添加一个额外的字符串。
[
["a1", "b2", "c3", "something"],
["d1", "e2", "f3", "something"],
["g1", "h2", "i3", "something"]
]
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的如下:
vec_of_strings
.iter_mut()
.map(|x| x.clone().push("something".to_string()))
.collect::<Vec<_>>();
println!("{:?}", vec_of_strings);
Run Code Online (Sandbox Code Playgroud)
但输出显示没有附加任何内容。
您正在做的事情会创建一个新的Vec,它不会修改现有的。事实上,现有的无法修改,因为您一成不变地借用它们( in &)Vec<&Vec<_>>。
请注意,这里使用.iter_mut()not.iter()是没有意义的,因为您不会改变元素。
此外,Vec::push()不会返回任何内容,因此.to_string()调用应该会给出编译时错误。(我假设您打算在字符串文字上调用它。)
解决上述问题:
let new_vec_of_strings = vec_of_strings
.iter()
.map(|x| {
let mut x = x.clone();
x.push("something".to_string());
x
})
.collect::<Vec<_>>();
println!("{:?}", new_vec_of_strings);
Run Code Online (Sandbox Code Playgroud)
然而,这一切似乎都是一个XY 问题——可能有更好的方法来实现您的目标。