Rust标准库是否具有最小/最大特性?

Rust标准库是否具有最小/最大特性?,rust,Rust,我想用它的最小值初始化一个T类型的变量,如T::min()。Rust 1.40.0中是否可能不需要外部依赖 另一种方法是将变量设置为None,但这会导致每次我要增加变量时检查None的开销。标准库中没有此类特征 但是,如果您愿意创建适当的特征并为您感兴趣的类型实现它们,则对于没有外部依赖关系的任意类型,可以有一个“最小”和“最大”的通用概念,例如: use core::fmt::Display; trait Min { fn min() -> Self; } trait Max

我想用它的最小值初始化一个
T
类型的变量,如
T::min()
。Rust 1.40.0中是否可能不需要外部依赖


另一种方法是将变量设置为
None
,但这会导致每次我要增加变量时检查
None
的开销。

标准库中没有此类特征

但是,如果您愿意创建适当的特征并为您感兴趣的类型实现它们,则对于没有外部依赖关系的任意类型,可以有一个“最小”和“最大”的通用概念,例如:

use core::fmt::Display;

trait Min {
    fn min() -> Self;
}

trait Max {
    fn max() -> Self;
}

impl Min for u8 {
    fn min() -> u8 {
        std::u8::MIN
    }
}

impl Max for u8 {
    fn max() -> u8 {
        std::u8::MAX
    }
}

impl Min for i32 {
    fn min() -> i32 {
        std::i32::MIN
    }
}

impl Max for i32 {
    fn max() -> i32 {
        std::i32::MAX
    }
}

fn print_min_max<T: Min + Max + Display>() {
    println!("{} -> {}", T::min(), T::max());
}

fn main() {
    let m: i32 = Min::min();
    println!("{}", m);

    print_min_max::<u8>();
    print_min_max::<i32>();
}

“另一种方法是将变量设置为无。但这会导致每次我想增加变量时都进行无检查的开销。“这是从哪里来的?你的意思类似于或吗?@khuynh是的,但我在一个以
T
为参数的函数中。这意味着我不知道
t
i32
还是
i8
。我所能做的就是调用
min\u value()
min()
来获得最小值。这是一个问题吗?可能有一种解决方案不需要知道t的最小值或最大值。是的,正如我在问题中所说,我可以使用可选类型。但是,在循环中对变量进行变异之前,检查变量是否为
None
会带来一定的开销。直接回答以下问题可以改进此答案:不,标准库中没有类似的内容。最小和最大特征可能取决于
Ord
。;有一个最高和最低的元素没有一个总的顺序是没有多大意义的。有一个“最大”和“最小”元素。我们可以定义元素的顺序。但严格地说,排序不是部分或全部排序。(因为亚述梅里的财产不令人满意。)@MichaelAnderson我认为你错了;这是一个完全有序的集合。但是,我同意,对于唯一的最小值或最大值,不需要总订单。@MichaelAnderson您是对的;当
=
定义为关心
x
y