【发布时间】:2020-02-28 09:05:19
【问题描述】:
我正在尝试在 Rust 中显示向量中的最小值,但找不到这样做的好方法。
给定一个i32的向量:
let mut v = vec![5, 6, 8, 4, 2, 7];
我的目标是获得该向量的最小值,而无需对其进行排序。
在 Rust 中获得 Vec<i32> 中的最小值的最佳方法是什么?
【问题讨论】:
标签: rust
我正在尝试在 Rust 中显示向量中的最小值,但找不到这样做的好方法。
给定一个i32的向量:
let mut v = vec![5, 6, 8, 4, 2, 7];
我的目标是获得该向量的最小值,而无需对其进行排序。
在 Rust 中获得 Vec<i32> 中的最小值的最佳方法是什么?
【问题讨论】:
标签: rust
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);返回错误。
let mut v = vec![5, 6, 8, 4, 2, 7];
let minValue = *v.iter().min().unwrap();
【讨论】:
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)
}
}
【讨论】:
match 部分。这只是一个糟糕的时机。