Mi trovavo ad analizzare un vecchio codice VB6 per un amico, ed ho trovato una possibile implementazione di un algorimo per la risoluzione del seguente problema: Dato un array di double, trovare il valore minimo, escludendo dei valori, ad esempio, (0).
Soluzione del passato trovata (VB6)
Function TrovaMinimo(dati() As Double, Optional Except As Double)
Dim i As Integer
Dim Minimo As Double
Dim numerodati As Integer
numerodati = UBound(dati)
Minimo = dati(1)
If Except < 0 Then
For i = 2 To numerodati
If dati(i) < Minimo Then
Minimo = dati(i)
End If
Next i
Else
For i = 2 To numerodati
If dati(i) < Minimo And dati(i) <> Except Then
Minimo = dati(i)
End If
Next i
End If
TrovaMinimo = Minimo
End Function
Se il valore del parametro Except è minore di zero, viene trovato il minimo considerando tutti i valori nell'array, altrimenti si cerca l'elemento minimo, escludendo il valore di Except
Come potrebbe essere implementata una possibile soluzione del problema, sfruttando le tecnologie attuali:
using System.Linq;
...
double[] data = new Double[] { 28, 25 ,0};
//Ritorna il valore minimo escludendo il valore 0
Console.WriteLine(data.Where(d => d != 0).ToArray().Min().ToString("N"));
//Ritorna il valore minimo
Console.WriteLine(data.Min().ToString("N"));