Pour une fonctionnalité de sécurité dans projet Silverlight, j'avais besoin de calculer l'écart-type (standard deviation) d'une série de nombres. Google étant notre ami, j'ai rapidement trouvé un exemple de code. Mais c'était du code d'avant LINQ. Il y en a pour 70 lignes.
Grâce à LINQ, on peut calculer un écart-type en 3 lignes seulement. Ca fonctionne avec Silverlight 2 (et 3) et avec n'importe quelle application .NET 3.5 (WPF, ASP.NET, ...). Voici mon code:
using System;
using System.Data.Linq;public static class SecurityMaths
{
public static double StandardDeviation(this IEnumerable<double> data)
{
double average = data.Average();
var individualDeviations = data.Select(num => Math.Pow(num - average, 2.0));
return Math.Sqrt(individualDeviations.Average());
}
}
Notez que j’ai défini la méthode en méthode d’extension, ce qui permet de l’utiliser comme la méthode Average de LINQ. On peut donc à l’utilisation écrire:
double[] numbers = new double[] { 2,4,4,4,5,5,7,9 };
double average = numbers.Average();
double standardDev = numbers.StandardDeviation();
Notez la lisibilité du code, il est presque aussi clair que la définition mathématique de l’écart-type. Merci qui? Merci LINQ!
Comments