在语言中有一个最小函数https://golang.org/pkg/math/#Min但是,如果我有超过2个数字怎么办?我必须在for循环中编写手动比较,还是有其他方法?数字在切片中。
答案 0 :(得分:6)
不,没有比循环更好的方法了。它不仅比任何其他方法更清洁,而且也是最快的。
values := []int{4, 20, 0, -11, -10}
min := values[0]
for _, v := range values {
if (v < min) {
min = v
}
}
fmt.Println(min)
修改强>
由于评论中有关于错误处理和如何处理空切片的讨论,这里有一个确定最小值的基本函数。请记住导入errors
。
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
}
答案 1 :(得分:1)
一般的回答是:“是的,如果您不知道要比较的确切项目数,则必须使用循环。”
在此package Min
中,功能的实现方式如下:
// For 2 values
func Min(value_0, value_1 int) int {
if value_0 < value_1 {
return value_0
}
return value_1
}
// For 1+ values
func Mins(value int, values ...int) int {
for _, v := range values {
if v < value {
value = v
}
}
return value
}
答案 2 :(得分:-3)
你应该写一个循环。在标准库中创建几十个函数来查找min / max / count / count_if / all_of / any_of / none_of等没有意义,就像在C ++中一样(根据参数大多数都是4种口味)。