亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號