我正在尝试在Rust中显示向量中的最小值,但找不到一个好的方法。
给定一个 i32
类型的向量:
let mut v = vec![5, 6, 8, 4, 2, 7];
我的目标是在不排序的情况下获取该向量的最小值。
在Rust中,获取Vec<i32>
中最小值的最佳方法是什么?
我正在尝试在Rust中显示向量中的最小值,但找不到一个好的方法。
给定一个 i32
类型的向量:
let mut v = vec![5, 6, 8, 4, 2, 7];
我的目标是在不排序的情况下获取该向量的最小值。
在Rust中,获取Vec<i32>
中最小值的最佳方法是什么?
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,
Returns the minimum element of an iterator.
If several elements are equally minimum, the first element is returned. If the iterator is empty, None is returned.
我发现这个Gist包含了一些常见的C#/.NET Linq操作,用Swift和Rust表达,非常方便: https://gist.github.com/leonardo-m/6e9315a57fe9caa893472c2935e9d589
let mut v = vec![5, 6, 8, 4, 2, 7];
let minValue = *v.iter().min().unwrap();
你好 @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
部分。这只是不巧的时间问题。 - Dailet max = nums.iter().max().unwrap_or(&0);
unwrap_or(value)
来返回默认值,如果找不到最大值的话。
println!("{:#?}", maxValue);
时,返回的是Some(8)
,但实际上我只需要得到8
。因为println!("{}", maxValue);
会返回一个错误。 - octanoprintln!("{}", maxValue.unwrap());
意为:打印出最大值,即maxValue.unwrap()
的值。 - tenxsoydev