获取向量中满足条件的所有索引

Per*_*ker 4 vector rust

我想知道是否有可能获得满足 Rust 向量数据类型中的条件的所有索引。我知道特征运算符提供了一种方法来查找执行此操作的第一个元素:

let test=vec![1,0,0,1,1];
let index = test.iter().position(|&r| r == 1);
println!("{}",index) //0
Run Code Online (Sandbox Code Playgroud)

但是,我有兴趣获得测试向量中等于 1 的所有索引。

let test=vec![1,0,0,1,1];
let indexes =  //Some Code
println!("{:?}",indexes) //0,3,4
Run Code Online (Sandbox Code Playgroud)

我应该怎么办?

Cha*_*man 12

使用enumerate()

let test = vec![1, 0, 0, 1, 1];
let indices = test
    .iter()
    .enumerate()
    .filter(|(_, &r)| r == 1)
    .map(|(index, _)| index)
    .collect::<Vec<_>>();
dbg!(indices); // 0, 3, 4
Run Code Online (Sandbox Code Playgroud)

游乐场

您也可以组合filter()map(),尽管我认为前一个版本更清晰:

let indices = test
    .iter()
    .enumerate()
    .filter_map(|(index, &r)| if r == 1 { Some(index) } else { None })
    .collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)

或者

let indices = test
    .iter()
    .enumerate()
    .filter_map(|(index, &r)| (r == 1).then(|| index))
    .collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)