2017-07-06 134 views

回答

3

不,沒有比循環更好的方法。它不僅比任何其他方法都清潔,而且也是最快的。

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

如果切片只包含正值,例如'[] int {4,5}'。 – icza

+0

由於您現在無條件地爲第一個元素編制索引,所以如果切片爲空,它會導致運行時恐慌,例如, '[] INT {}'。 – icza

+0

再次 - 空片的結果應該是什麼? – lofcek

0

你應該寫一個循環。在標準庫中創建數十個函數沒有任何意義,例如在C++中查找min/max/count/count_if/all_of/any_of/none_of等(其中大多數按照參數的4種風格)。

+0

'math.Max()'可能是可變的。 – md2perpe

+0

我不這麼認爲。它必須更加複雜,因爲沒有任何爭論的結果會是什麼? – lofcek

+0

對於'func Max(x float64,xs ... float64)float64'來說,這不成問題。 – md2perpe