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