Rust如何拆分并展平迭代器?求等效merge_map的惯用实现
Rust中实现元素拆分合并与反向过滤的惯用方式
关于你说的类似
merge_map的拆分合并操作:直接用flat_map就行,这就是Rust里做这种“把每个元素生成的子迭代器展开合并”的惯用方法。比如你要实现的需求,代码可以这么写:let word_list = vec!["a".to_string(), "b.c".to_string(), "d".to_string()]; // 得到&str类型的结果集合 let result: Vec<&str> = word_list.iter().flat_map(|s| s.split('.')).collect(); // 如果需要String类型的结果,就加上一步转换: // let result: Vec<String> = word_list.iter().flat_map(|s| s.split('.').map(|part| part.to_string())).collect();flat_map会自动把每个字符串split后产生的子迭代器里的元素逐个平铺到最终集合,正好能把输入["a","b.c","d"]转换成["a","b","c","d"]。关于filter的反向操作:Rust里没有专门的“反filter”方法,惯用方式就是直接在filter的判断条件里取反。比如原来用
filter(|x| x.is_empty())保留空元素,反向操作就是filter(|x| !x.is_empty())来移除空元素。
内容的提问来源于stack exchange,提问作者Sidhin S Thomas
相关产品推荐
相关产品推荐

