为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕码人8056858 2021-11-29 16:09:46
先行者:我刚刚开始接触 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}如果不是,最好的“约定”是否只是创建一个包含这样的助手的包?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

没有内置的。

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

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

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

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

  2. 使用范围循环:

for i, e := range v {

    if i==0 || e < m {

        m = e

    }

}

通过不给出值的索引,它会给你最小值 0,它可能不存在于给定的值中,所以你还必须在索引上应用条件。


查看完整回答
反对 回复 2021-11-29
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

正确指出的那样,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) 并且最大值是免费的。:-)


查看完整回答
反对 回复 2021-11-29
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

   min := s[0]

    for i :=1; i < len(s); i++ {

        if min > s[i] {

            min = s[i]

        }

    }

min > s[i]? min = s[i] : min


查看完整回答
反对 回复 2021-11-29
  • 3 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信