我想拆分一个字符串并从我的函数返回Vec<String>
。它必须是Vec<String>
而不是Vec<&str>
,因为我无法返回Vec<&str>
,是吗?但是,如果可以的话,我该怎么做?
let var1: Vec<&str> = my_string.split("something").collect();
let res = var1.iter().map(|x| x.to_string());
// I want to return Vec<String>
我尝试了不同的版本,但得到了error: mismatched types
和其他类似的错误。有更简单的方法吗?
答案 0 :(得分:13)
您不需要创建中间Vec<&str>
,只需映射to_string()
并在之后使用collect()
:
let res: Vec<String> = my_string.split("something").map(|s| s.to_string()).collect();
答案 1 :(得分:1)
您可以使用&str
将每个String
映射到Vec::from_iter
并收集结果:
use std::iter::FromIterator;
let res = Vec::from_iter(my_string.split("something").map(String::from));
这个问题与this one相反。
请注意,collect
是以from_iter
。