问题
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