找到golang的最小值?

时间:2017-07-06 05:56:42

标签: go

在语言中有一个最小函数https://golang.org/pkg/math/#Min但是,如果我有超过2个数字怎么办?我必须在for循环中编写手动比较,还是有其他方法?数字在切片中。

3 个答案:

答案 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种口味)。