2017-07-06 2 views

Antwort

3

Nein, es gibt keinen besseren Weg als das Schleifen. Es ist nicht nur sauberer als jeder andere Ansatz, es ist auch der schnellste.

values := []int{4, 20, 0, -11, -10} 

min := values[0] 
for _, v := range values { 
     if (v < min) { 
      min = v 
     } 
} 

fmt.Println(min) 

EDIT

Da es einige Diskussionen in den Kommentaren zur Fehlerbehandlung war und wie leer Scheiben zu handhaben, hier ist eine grundlegende Funktion, die den Minimalwert bestimmt. Denken Sie daran, errors zu importieren.

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

Gibt ein falsches Ergebnis, wenn die Schicht nur positive Werte enthält, z. '[] int {4, 5}'. – icza

+0

Da Sie jetzt das erste Element bedingungslos indizieren, verursacht es eine Laufzeitpanik, wenn die Scheibe leer ist, z. '[] int {}'. – icza

+0

Und noch einmal - was sollte das Ergebnis für eine leere Scheibe sein? – lofcek

0

Sie sollten eine Schleife schreiben. Es macht keinen Sinn, Dutzende von Funktionen in der Standardbibliothek zu erstellen, um min/max/count/count_if/all_of/any_of/none_of usw. zu finden, wie in C++ (die meisten davon in 4 Varianten entsprechend den Argumenten).

+0

Das 'math.Max ​​()' könnte variadisch sein. – md2perpe

+0

Ich glaube nicht. Es muss komplizierter sein, denn was wird das Ergebnis für kein Argument sein? – lofcek

+0

Für 'func Max (x float64, xs ... float64) float64' wäre das kein Problem. – md2perpe

Verwandte Themen