如何修复此 clippy 警告(无需收集)

How to fix this clippy warning (needless collect)

我很难修复 needless collect clippy warning

pub fn import_selection(packages: &mut Vec<PackageRow>) -> io::Result<()> {
    let file = fs::File::open("uad_exported_selection.txt")?;
    let reader = BufReader::new(file);
    let imported_selection: Vec<String> = reader
        .lines()
        .map(|l| l.expect("Could not exported selection"))
        .collect();

    for (i,p) in packages.iter_mut().enumerate() {
        if imported_selection.contains(&p.name) {
            p.selected = true;
            ...
        } else {
            p.selected = false;
        }
    }
    Ok(())
}

我尝试直接从迭代器中使用 any(),它编译但似乎不起作用(它没有找到任何应​​该找到的东西)

在这种情况下真的可以删除收集吗?

这是一个 known issue with current Clippy. It tries to point out that collecting an iterator first and then calling contains(), len(), etc. on the collection is usually unnecessary. Yet current Clippy does not take into account,在您的情况下,collect() 的结果在循环期间被多次使用,从而避免了每次迭代都重新执行 lines().map()-迭代器那个循环。

这是误报。

您可以用 #[allow(clippy:needless_collect)] 标记方法或函数以抑制 lint。