猿问

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

先行者:我刚刚开始接触 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

}

OR 可变数量的 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

}

如果不是,最好的“约定”是否只是创建一个包含这样的助手的包?


慕码人8056858
浏览 150回答 3
3回答

潇湘沐

没有内置的。如果您只在一个包中需要此功能,您可以编写一个未导出的函数(例如minIntSlice)。如果您需要在多个包中使用此功能,您可以创建一个包并将类似的功能放在那里。您应该考虑将此包设为内部 (&nbsp;https://golang.org/s/go14internal&nbsp;)。关于如何改进代码的一些建议:MinIntSlice将为空切片返回 0。然而 0 也是一个有效的 min 元素。我认为在空切片上调用 panic 是更好的选择。使用范围循环:for i, e := range v {&nbsp; &nbsp; if i==0 || e < m {&nbsp; &nbsp; &nbsp; &nbsp; m = e&nbsp; &nbsp; }}通过不给出值的索引,它会给你最小值 0,它可能不存在于给定的值中,所以你还必须在索引上应用条件。

回首忆惘然

正确指出的那样,Golang 中没有内置的 min 或 max 函数。但是,我会建议一个稍微不同的解决方案:func MinMax(array []int) (int, int) {&nbsp; &nbsp; var max int = array[0]&nbsp; &nbsp; var min int = array[0]&nbsp; &nbsp; for _, value := range array {&nbsp; &nbsp; &nbsp; &nbsp; if max < value {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max = value&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if min > value {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min = value&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return min, max}这样就解决了空切片的问题:出现运行时错误 ( index out of range) 并且最大值是免费的。:-)

慕雪6442864

&nbsp; &nbsp;min := s[0]&nbsp; &nbsp; for i :=1; i < len(s); i++ {&nbsp; &nbsp; &nbsp; &nbsp; if min > s[i] {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min = s[i]&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }min > s[i]? min = s[i] : min
随时随地看视频慕课网APP

相关分类

Go
我要回答