Rust 拆分字符串并返回Vec<;字符串>;

Rust 拆分字符串并返回Vec<;字符串>;,rust,Rust,我想拆分一个字符串并从函数返回Vec。它必须是Vec而不是Vec,因为我不能返回Vec,可以吗?如果我能,我怎么能做到呢 let var1: Vec<&str> = my_string.split("something").collect(); let res = var1.iter().map(|x| x.to_string()); // I want to return Vec<String> 让var1:Vec=my_string.split(“某物”).

我想拆分一个字符串并从函数返回
Vec
。它必须是
Vec
而不是
Vec
,因为我不能返回
Vec
,可以吗?如果我能,我怎么能做到呢

let var1: Vec<&str> = my_string.split("something").collect();
let res = var1.iter().map(|x| x.to_string());
// I want to return Vec<String>
让var1:Vec=my_string.split(“某物”).collect();
设res=var1.iter().map(|x | x.to_string());
//我要退Vec

我尝试了不同的版本,但得到了
错误:类型不匹配
和其他类似的错误。有更简单的方法吗?

您不需要创建中间
Vec
,只需将
映射到_string()
,然后使用
collect()

let res: Vec<String> = my_string.split("something").map(|s| s.to_string()).collect();
let res:Vec=my_string.split(“某物”).map(|s|s.to_string()).collect();

您可以将每个
&str
映射到
String
并使用
Vec::from\u iter
收集结果:

use std::iter::FromIterator;

let res = Vec::from_iter(my_string.split("something").map(String::from));
这个问题与我们的观点相反


请注意,
collect
是根据来自\u iter

实现的,您能否尝试生成一个复制您的问题的?您可以在以后使用共享。您可以将“字符串向量拆分”添加到标记中吗?我无法找到你的问题,直到我问了自己并被标记了。在函数中,它甚至更好,因为函数返回类型意味着你不需要
let res:Vec=
方面。你甚至可以通过将
.map(|s.to_string())
替换为
map(str::to_string)
来缩短它。我看过
map(ToString::to_string)
也是一种解决方案。我不知道这是否比
映射(str::to_string)
更好。我想指出,使用
collect()
从迭代器创建集合比使用
from_iter()更惯用
直接转换,但这当然不是一条硬性规定。而且,随着专业化
to_string()
的引入,似乎也是将
&str
转换为
字符串的惯用方法,尽管我个人喜欢
字符串::from
转换为()
more.@Vladimitavevevevev感谢您的评论。您是对的,docs说很少显式调用来自iter的
,并指向
collect
。但是在某些情况下,比如在变量定义中,来自iter的
更可读。当可以推断
collect
的类型时,就像在函数返回中一样,
collect
更具可读性。