Open1

Rustでmax_indexを取得する

よしかわよしかわ

TL;DR

foldで、max値とそのindexのみ保持し続ける。

e.g. iterの値がf64の場合

fn main() {
    let list: Vec<i64> = vec![1, 9, 2, 8, 3, 7, 4, 6, 5];

    let (max_index, max) =
        list.iter()
            .enumerate()
            .fold((usize::MIN, i64::MIN), |(i_a, a), (i_b, &b)| {
                if b > a {
                    (i_b, b)
                } else {
                    (i_a, a)
                }
            });

    println!("max index: {:?}", max_index);
    // -> max index: 1
    println!("max: {:?}", max);
    // -> max: 9
}

参考

https://qiita.com/lo48576/items/343ca40a03c3b86b67cb
https://users.rust-lang.org/t/how-to-get-min-max-min-index-max-index/45324