在golang中找到最小值?

在golang中找到最小值?,go,Go,在语言中有一个最小函数,但是如果我有两个以上的数字呢?我必须在for循环中编写一个手动比较,或者有其他方法吗?数字在片中。您应该编写一个循环。在标准库中创建几十个函数是没有意义的,以找到Mc/Max/Curn/CurtIIF/ALYOF/ANYON/NOEL等(如C++中的大多数(4种味道)。< P>不,没有比循环更好的方法。它不仅比任何其他方法更干净,而且速度最快 values := []int{4, 20, 0, -11, -10} min := values[0] for _, v :=

在语言中有一个最小函数,但是如果我有两个以上的数字呢?我必须在for循环中编写一个手动比较,或者有其他方法吗?数字在片中。

您应该编写一个循环。在标准库中创建几十个函数是没有意义的,以找到Mc/Max/Curn/CurtIIF/ALYOF/ANYON/NOEL等(如C++中的大多数(4种味道)。

< P>不,没有比循环更好的方法。它不仅比任何其他方法更干净,而且速度最快

values := []int{4, 20, 0, -11, -10}

min := values[0]
for _, v := range values {
        if (v < min) {
            min = v
        }
}

fmt.Println(min)
一般的回答是:“是的,如果您不知道要比较的项目的确切数量,则必须使用循环”

在此
Min
中,功能的实现方式如下:

//用于2个值
func Min(值0,值1 int)int{
如果值_0<值_1{
返回值0
}
返回值_1
}
//对于1+值
func Mins(值int,值…int)int{
对于v,v:=范围值{
如果v<值{
值=v
}
}
返回值
}

math.Max()可能是可变的。我不这么认为。它必须更复杂,因为无参数的结果是什么?对于
func Max(x float64,xs…float64)float64
,这不会是一个问题。只调用ar:=[]int{1,2,3,4}会更糟糕。如果切片只包含正值,例如
[]int{4,5},则会给出错误的结果
。由于现在您无条件地索引第一个元素,因此如果切片为空,则会导致运行时死机,例如,
[]int{}
。再说一遍-空切片的结果应该是什么?结果类型的零值,可选地表示它无效(例如,
ok bool
)@icza yes,我知道,但这段代码应该只是一个例子,为了清楚起见,我省略了这样的检查。这个答案并不是一个完整的比较函数。如果你能以一种简短易读的方式在答案中包含上述例子,答案会更有帮助。
func Min(values []int) (min int, e error) {
    if len(values) == 0 {
        return 0, errors.New("Cannot detect a minimum value in an empty slice")
    }

    min = values[0]
    for _, v := range values {
            if (v < min) {
                min = v
            }
    }

    return min, nil
}