Rust 是否可以使用迭代器::过滤器\映射来添加条件过滤?
此代码遍历Rust 是否可以使用迭代器::过滤器\映射来添加条件过滤?,rust,Rust,此代码遍历/tmp文件夹以显示以.txt结尾的文件: const FOLDER_NAME: &str = "/tmp"; const PATTERN: &str = ".txt"; use std::error::Error; use walkdir::WalkDir; // 2.2.9 fn main() -> Result<(), Box<dyn Error>> { println!("Walking folder {}", FOLD
/tmp
文件夹以显示以.txt
结尾的文件:
const FOLDER_NAME: &str = "/tmp";
const PATTERN: &str = ".txt";
use std::error::Error;
use walkdir::WalkDir; // 2.2.9
fn main() -> Result<(), Box<dyn Error>> {
println!("Walking folder {}", FOLDER_NAME);
for entry in WalkDir::new(FOLDER_NAME).into_iter().filter_map(|e| e.ok()) {
let x = entry.file_name().to_str();
match x {
Some(x) if x.contains(PATTERN) => println!("This file matches: {:?}", entry),
_ => (),
}
}
Ok(())
}
const文件夹名称:&str=“/tmp”;
常量模式:&str=“.txt”;
使用std::error::error;
使用walkdir::walkdir;//2.2.9
fn main()->结果{
println!(“移动文件夹{}”,文件夹名称);
用于WalkDir::new(文件夹名称)中的条目。输入到iter()中。过滤映射(| e | e.ok()){
设x=entry.file_name().to_str();
匹配x{
如果x.contains(PATTERN)=>println!(“此文件匹配:{:?}”,条目),则为某些(x),
_ => (),
}
}
好(())
}
尽管这是可行的,但是否可以利用
过滤器映射
来执行当前在匹配
中发生的后缀过滤?当条件为真时,您需要返回包装在部分
中的条目:
use std::error::Error;
use walkdir::WalkDir; // 2.2.9
const FOLDER_NAME: &str = "/tmp";
const PATTERN: &str = ".txt";
fn main() -> Result<(), Box<dyn Error>> {
println!("Walking folder {}", FOLDER_NAME);
let valid_entries = WalkDir::new(FOLDER_NAME)
.into_iter()
.flat_map(|e| e)
.flat_map(|e| {
let name = e.file_name().to_str()?;
if name.contains(PATTERN) {
Some(e)
} else {
None
}
});
for entry in valid_entries {
println!("This file matches: {:?}", entry);
}
Ok(())
}
另见:
.filter_映射(|e | e.ok())
忽略错误的行为是故意的吗?是的,/tmp中有几个文件夹我没有权限。例如,Err(错误{depth:1,内部:Io{path:Some(/tmp/ssh-91erCI9EbnQJ)),Err:Os{code:13,种类:PermissionDenied,消息:“Permission denied”}})
let valid_entries = WalkDir::new(FOLDER_NAME)
.into_iter()
.flat_map(|e| e)
.filter(|e| {
e.file_name()
.to_str()
.map_or(false, |n| n.contains(PATTERN))
});