Rust で複数の数値の中から最小値・最大値を見つける (min, max)

2 つの数値から大きい方を取り出す

Rust の標準ライブラリが提供しているジェネリクス関数 std::cmp::max を使うと、2 つの数値のうち大きい方の値を取り出すことができます。

let larger = std::cmp::max(2, 5);  //=> 5

// 呼び出し時のコードを短くしたいときは次のように use 宣言します
// use std::cmp::max;
// let larger = max(2, 5);

また、数値のプリミティブ型 (i32f64) は core::cmp::Ord トレイトを実装しているため、max メソッドでも上記と同様の処理を行えます。

let larger = 2.max(5);  //=> 5

前者の関数型と比較して、後者のメソッド型は直感的に理解しにくいかもしれませんが、場面によっては便利です。 例えば、num.max(0) という表現は、num が負の値だったときに、0 になるよう修正する という処理になります。

複数の数値の中から最大値を取り出す

数値型のベクターや配列から、最大の値を持つ値を取り出すには次のようにします。

Vec<i32> から最大値を取り出す
let nums: Vec<i32> = vec![3, 1, 5, 2, 4];
// let nums: [i32; 5] = [3, 1, 5, 2, 4];

if let Some(max) = nums.iter().max() {
    println!("Max value: {}", max);
} else {
    println!("nums is empty");
}
実行結果
Max value: 5

この場合、max メソッドの戻り値は Option 型 になっており、ベクターや配列が空の場合は None を返すことに注意してください。