【问题标题】:How to get the minimum value within a vector in Rust?如何在 Rust 中获取向量中的最小值?
【发布时间】:2020-02-28 09:05:19
【问题描述】:

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

给定一个i32的向量:

let mut v = vec![5, 6, 8, 4, 2, 7];

我的目标是获得该向量的最小值,而无需对其进行排序。

在 Rust 中获得 Vec<i32> 中的最小值的最佳方法是什么?

【问题讨论】:

    标签: rust


    【解决方案1】:
    let minValue = vec.iter().min();
    match minValue {
        Some(min) => println!( "Min value: {}", min ),
        None      => println!( "Vector is empty" ),
    }
    

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

    fn min(self) -> Option<Self::Item>
    where
        Self::Item: Ord, 
    

    返回迭代器的最小元素。

    如果多个元素的最小值相同,则返回第一个元素。如果迭代器为空,则返回 None。

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

    【讨论】:

    • 谢谢戴,我想这是为了获取最大值,那最小值呢?因为作为回报,我有Some(8),当我实际上只需要得到8时,我执行println!("{:#?}", maxValue);,因为println!("{}", maxValue);返回错误。
    【解决方案2】:
    let mut v = vec![5, 6, 8, 4, 2, 7];
    let minValue = *v.iter().min().unwrap();
    

    【讨论】:

    • 对 Rust 来说相当陌生,但 * 在这里究竟做了什么?没有它也可以工作。
    【解决方案3】:

    Hi @octano 因为 Dai 已经回答了,min/max 返回 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)
        }
    }
    

    Play ground example for Iter.min()

    【讨论】:

    • @aws_apprentice 当布兰杰回答时,我的回答不包括match 部分。这只是一个糟糕的时机。
    • 本网站没有重复答案的规定。欢迎您扩展您的答案以吸引选票,关键是发布正确的答案。
    • 是的,重复的原因是时间问题,我发布了答案,Dai 很快更新了他的答案。
    猜你喜欢
    • 2019-08-29
    • 2012-04-10
    • 1970-01-01
    • 2015-04-18
    • 2021-05-09
    • 1970-01-01
    • 2021-06-26
    • 2021-11-08
    相关资源
    最近更新 更多