golang 中是否有内置的 min 函数用于 int 参数的切片或可变数量的 int 参数?

新手上路,请多包涵

先行者:我才刚刚开始接触 golang。

这可能被证明是一个愚蠢的问题,因为执行这些计算很容易,但我还是要问这个问题,因为我在谷歌搜索时没有找到答案。

是否有一个内置函数返回 int 参数的最小值:

 func MinIntSlice(v []int) (m int) {
    if len(v) > 0 {
        m = v[0]
    }
    for i := 1; i < len(v); i++ {
        if v[i] < m {
            m = v[i]
        }
    }
    return
}

或可变数量的 int 参数中的最小值:

 func MinIntVarible(v1 int, vn ...int) (m int) {
    m = v1
    for i := 0; i < len(vn); i++ {
        if vn[i] < m {
            m = vn[i]
        }
    }
    return
}

如果不是,最好的“约定”是简单地创建一个包含这样的助手的包吗?

原文由 Jesse 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

没有内置的。

如果您只需要在一个包中使用此功能,您可以编写一个未导出的函数(例如 minIntSlice )。

如果您需要在多个包中使用此功能,您可以创建一个包并将类似的功能放在那里。您应该考虑将此包设为内部包 ( https://golang.org/s/go14internal )。

关于如何改进代码的一些建议:

  1. MinIntSlice 将为空切片返回 0。但是 0 也是一个有效的最小元素。我认为在空切片上调用 panic 是更好的选择。

  2. 使用范围循环:

    for i, e := range v {
       if i==0 || e < m {
           m = e
       }
   }

通过不给出值的索引,它将为您提供最小值 0,这可能不存在于给定值中,因此您还必须对索引应用条件。

原文由 kostya 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如@kostya 正确指出的那样,Golang 中没有内置的 min 或 max 函数。

但是,我会建议一个稍微不同的解决方案:

 func MinMax(array []int) (int, int) {
    var max int = array[0]
    var min int = array[0]
    for _, value := range array {
        if max < value {
            max = value
        }
        if min > value {
            min = value
        }
    }
    return min, max
}

这样空切片的问题就解决了:出现运行时错误( index out of range )并且最大值是免费的。 :-)

原文由 Michael Dorner 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题