Rust 如何展开映射并从字符串迭代器中拆分
有没有一种方法可以在不切换到使用Rust 如何展开映射并从字符串迭代器中拆分,rust,ownership,Rust,Ownership,有没有一种方法可以在不切换到使用iter而不是到iter的情况下实现这一点 let strings: Vec<String> = vec!["1 2".to_string(), "3 4".to_string()]; strings.into_iter().flat_map(|str| str.split(" ")); 当使用iter而不是进入iter时,我得到了一个引用迭代器,一切都正常,但我想知道是否有可能在Strings的迭代器上进行此操作。代码的问题是您正在执行这些操作:
iter
而不是到iter
的情况下实现这一点
let strings: Vec<String> = vec!["1 2".to_string(), "3 4".to_string()];
strings.into_iter().flat_map(|str| str.split(" "));
当使用
iter
而不是进入iter
时,我得到了一个引用迭代器,一切都正常,但我想知道是否有可能在String
s的迭代器上进行此操作。代码的问题是您正在执行这些操作:
一起消耗到\u iter
split
fn main() {
let strings = vec!["1 2".to_string(), "3 4".into()];
let result = strings.into_iter().flat_map(|str| str.split(" ").map(str::to_owned).collect::<Vec<_>>());
println!("{:?}", result.collect::<Vec<_>>());
}
fn main(){
让strings=vec![“12.to_string(),“34.into()];
让result=strings.into_iter().flat_map(| str | str.split(“”).map(str::to_owned.collect::());
println!(“{:?}”,result.collect::());
}
事实上,一开始不使用矢量的成本更低:
fn main() {
let strings = vec!["1 2".to_string(), "3 4".into()];
let result = strings.iter().flat_map(|str| str.split(" ")).map(str::to_owned);
println!("{:?}", result.collect::<Vec<_>>());
}
fn main(){
让strings=vec![“12.to_string(),“34.into()];
让result=strings.iter().flat_-map(| str | str.split(“”)).map(str::to_-owned);
println!(“{:?}”,result.collect::());
}
我也遇到了同样的问题,最终创建了一个迭代器,该迭代器拥有字符串的所有权,下面是代码。因为你是按空间分开的,所以应该合适
struct单词{
buf:字符串,
抵销:usize,
}
言简意赅{
fn新(buf:String)->单词{
字{buf,偏移量:0}
}
}
单词的impl迭代器{
类型项=字符串;
fn下一步(&mut self)->选项{
设s=&(self.buf)[self.offset..];
让left=s.chars().在(|x | x.是_空格())时取_。count();
设right=left+s[left..].chars().take_while(|x |!x.is_whitespace()).count();
如果左<右{
self.offset+=右;
返回一些(字符串::from(&s[left..right]);
}
没有一个
}
}
这里是我如何使用它
fn read\u file最后你想要什么?拥有或借用的字符串?下一步是使用.map
将它们解析为整数,所以我想这没关系。我建议您在做复杂的事情之前,充分理解Rust的借用规则,否则您将无法做任何事情。