如何在Rust中获得向量的最小值?

oct*_*ano 0 rust

我正在尝试在Rust中显示向量的最小值,但找不到找到它的好方法。

这是我创建向量的方式i32

let mut v = vec![5, 6, 8, 4, 2, 7];
Run Code Online (Sandbox Code Playgroud)

我的目标是在无需排序的情况下获取该向量的最小值。

i32在Rust 中获得向量最小值的最佳方法是什么?

小智 23

let mut v = vec![5, 6, 8, 4, 2, 7];
let minValue = *v.iter().min().unwrap();
Run Code Online (Sandbox Code Playgroud)

  • 对于 Rust 来说相当陌生,但是 * 在这里到底做了什么?没有它也能工作。 (6认同)

Dai*_*Dai 6

let minValue = vec.iter().min();
match minValue {
    Some(min) => println!( "Min value: {}", min ),
    None      => println!( "Vector is empty" ),
}
Run Code Online (Sandbox Code Playgroud)

https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.min

fn min(self) -> Option<Self::Item>
where
    Self::Item: Ord, 
Run Code Online (Sandbox Code Playgroud)

返回迭代器的最小元素。

如果几个元素相等地最小,则返回第一个元素。如果迭代器为空,则返回None。

我发现这个Gist具有在Swift和Rust中表达的一些常见的C#/。NET Linq操作,非常方便:https : //gist.github.com/leonardo-m/6e9315a57fe9caa893472c2935e9d589


bla*_*ger 5

你好@octano 正如 Dai 已经回答的那样,最小/最大返回 Option<> 值,所以你只能像示例中那样匹配它:

fn main() {
    let vec_to_check = vec![5, 6, 8, 4, 2, 7];
    let min_value = vec_to_check.iter().min();
    match min_value {
        None => println!("Min value was not found"),
        Some(i) => println!("Min Value = {}", i)
    }
}
Run Code Online (Sandbox Code Playgroud)

Iter.min() 的播放示例