Split a string and return Vec<String>

孤人 提交于 2020-07-13 10:02:42

问题


I want to split a string and return Vec<String> from my function. It has to be Vec<String> and not Vec<&str> because I can't return Vec<&str>, can I? If I can, though, how can I do that?

let var1: Vec<&str> = my_string.split("something").collect();
let res = var1.iter().map(|x| x.to_string());
// I want to return Vec<String>

I've tried different versions but gotten error: mismatched types and other kinds of similar errors. Is there an easier way?


回答1:


You don't need to create an intermediate Vec<&str>, just map to_string() and use collect() after that:

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



回答2:


You can map each &str to String an collect the result using Vec::from_iter:

use std::iter::FromIterator;

let res = Vec::from_iter(my_string.split("something").map(String::from));

This question is the opposite of this one.

Note that collect is implemented in terms of from_iter.



来源:https://stackoverflow.com/questions/37547225/split-a-string-and-return-vecstring

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!