Go: trovare il valore minimo e massimo in una slice

Il linguaggio di programmazione Go, noto anche come Golang, è apprezzato per la sua semplicità, efficienza e facilità di utilizzo. Quando si lavora con dati in Go, è spesso necessario trovare i valori minimo e massimo in una slice. In questo articolo, esploreremo diversi approcci per raggiungere questo obiettivo in modo efficiente e pulito.

Il metodo più intuitivo per trovare il valore minimo e massimo in una slice è attraverso un'iterazione manuale degli elementi. Ecco un esempio di codice che illustra questa tecnica:


package main

import (
	"fmt"
)

func findMinMax(slice []int) (min, max int) {
	if len(slice) == 0 {
		return 0, 0
	}

	min, max = slice[0], slice[0]

	for _, value := range slice {
		if value < min {
			min = value
		}
		if value > max {
			max = value
		}
	}

	return min, max
}

func main() {
	slice := []int{4, 1, 7, 9, 3, 6, 8}
	min, max := findMinMax(slice)

	fmt.Printf("Valore Minimo: %d\nValore Massimo: %d\n", min, max)
}

Go fornisce una libreria standard sort che può essere utilizzata per ordinare la slice e quindi estrarre il minimo e il massimo. Questo approccio potrebbe essere più efficiente per slice più grandi:


package main

import (
	"fmt"
	"sort"
)

func findMinMaxSort(slice []int) (min, max int) {
	if len(slice) == 0 {
		return 0, 0
	}

	sort.Ints(slice)
	min, max = slice[0], slice[len(slice)-1]

	return min, max
}

func main() {
	slice := []int{4, 1, 7, 9, 3, 6, 8}
	min, max := findMinMaxSort(slice)

	fmt.Printf("Valore Minimo: %d\nValore Massimo: %d\n", min, max)
}

Se si lavora con slice di numeri in virgola mobile (float64), è possibile utilizzare il package math per trovare il minimo e il massimo:


package main

import (
	"fmt"
	"math"
)

func findMinMaxFloat64(slice []float64) (min, max float64) {
	if len(slice) == 0 {
		return 0, 0
	}

	min, max = slice[0], slice[0]

	for _, value := range slice {
		min = math.Min(min, value)
		max = math.Max(max, value)
	}

	return min, max
}

func main() {
	slice := []float64{4.2, 1.1, 7.8, 9.3, 3.6, 6.7, 8.0}
	min, max := findMinMaxFloat64(slice)

	fmt.Printf("Valore Minimo: %.2f\nValore Massimo: %.2f\n", min, max)
}

Conclusioni

Trovare il valore minimo e massimo in una slice con Go può essere eseguito in diversi modi, a seconda delle esigenze e delle caratteristiche dei dati. Sia l'approccio manuale che l'utilizzo delle librerie standard offrono soluzioni efficaci. La scelta dipende dalla complessità del problema e dai requisiti specifici dell'applicazione.

Torna su