我想映射一个str的向量,以便它再现其他值:
let v = vec!["str1", "str2", "str3", "str4"]
let res = v.map_in_place(|x| x + "__") // error: binary operation `+` cannot be applied to type `&str`
请注意,我不需要更改 x
,我需要通过添加新的字符串文字来创建新 &str
x
。我怎么能这样做?
答案 0 :(得分:3)
您需要先将x
转换为String
,然后才能+
x.to_string() + "__"
,但是,您的代码还有另一个问题:
此处v
的类型为Vec<&str>
,map_in_place
期望结果类型的类型与原始类型的大小(和对齐方式)相同,且大小为{ {1}}与&str
不同,因此在运行时失败 - Demo。
要使这项工作有以下几种可能的变化:
如果您真的想使用String
,可以将map_in_place
声明为:
v
另一种方法是使用let v = vec!["str1".to_string(), "str2".to_string(), "str3".to_string(), "str4".to_string()];
,它会在创建新矢量后立即释放原始矢量。
into_iter().map(...).collect()
输出:
fn main() {
let v = vec!["str1", "str2", "str3", "str4"];
let res = v.into_iter().map(|x| x.to_string() + "__").collect::<Vec<_>>();
println!("{}", res);
}
答案 1 :(得分:2)
问题是内存必须由某人拥有。在你的文字的情况下,他们直接写入你的二进制文件。但是当你想要将两个文字加在一起时,这是行不通的。您将需要制作一些String
来表示实际拥有的结构,然后如果您真的想要使用切片矢量,请从该矢量中创建一个。这有意义吗?