goflow
goflow

Reputation: 121

Find the minimum value in golang?

In the language there is a minimum function https://golang.org/pkg/math/#Min But what if I have more than 2 numbers? I must to write a manual comparison in a for loop, or is there another way? The numbers are in the slice.

Upvotes: 8

Views: 24515

Answers (4)

HexaCrop
HexaCrop

Reputation: 4263

Starting from go 1.21 you have an inbuilt function min for finding the minimum value

https://tip.golang.org/ref/spec#Min_and_max

Upvotes: 5

LoveRick
LoveRick

Reputation: 85

General answer is: "Yes, you must use a loop, if you do not know exact number of items to compare".

In this package Min functions are implemented like:

// For 2 values
func Min(value_0, value_1 int) int {
    if value_0 < value_1 {
        return value_0
    }
    return value_1
}

// For 1+ values
func Mins(value int, values ...int) int {
    for _, v := range values {
        if v < value {
            value = v
        }
    }
    return value
}

Upvotes: 1

Lukas Kolletzki
Lukas Kolletzki

Reputation: 2246

No, there isn't any better way than looping. Not only is it cleaner than any other approach, it's also the fastest.

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

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

fmt.Println(min)

EDIT

Since there has been some discussion in the comments about error handling and how to handle empty slices, here is a basic function that determines the minimum value. Remember to import 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
}

Upvotes: 16

lofcek
lofcek

Reputation: 1233

You should write a loop. It does not make sense to create dozens of function in standard library to find min/max/count/count_if/all_of/any_of/none_of etc. like in C++ (most of them in 4 flavours according arguments).

Upvotes: -3

Related Questions