Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

Quizz 4

En C#3, comment faire une moyenne sans la méthode Average ni la méthode Sum ?

static void Main(string[] args)

{

    int[] values = { 1, 2, 3 };

    Console.WriteLine(Average(values));

}

 

static int Average(IEnumerable<int> values)

{

    // Just code it

}

affichera 2.

Enjoy Smile

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié lundi 11 août 2008 23:01 par Matthieu MEZIL

Classé sous : , , ,

Commentaires

# re: Quizz 4 @ lundi 11 août 2008 23:45

Simplement en utilisant un Aggregate...

static int Average(IEnumerable<int> values)

{

   return values.Aggregate(0, (a, b) => a + b, t => t/values.Count());

}

Avec une valeur de départ à 0, on fait la somme et on divise le total par le nombre de valeurs.

Sacha

# re: Quizz 4 @ mardi 12 août 2008 03:00

C'est effectivement à Aggregate que je pensais même si j'avais initialement pensé à la version suivante :

static int Average(IEnumerable<int> values)

{

    return values.Aggregate((v1, v2) => v1 + v2) / values.Count();

}

Mais ta méthode est encore plus "C# 3". Bien joué Wink

Matthieu MEZIL

# re: Quizz 4 @ mardi 12 août 2008 18:01

Ce qui est intéressant, c'est que les deux méthodes prennent 5 à 10 fois plus de temps que si on le fait en standard avec une simple boucle (ce qui est le cas d'ailleurs de l'implémentation standard de Average

<T>())...

C'est bien C#3, mais si ça multiplie tout le temps CPU par 10, va falloir acheter des ventilateurs :)

smo

# re: Quizz 4 @ mardi 12 août 2008 18:07

pffffffffffff. En même temps, le mec qui fait un Average comme ça dans la vraie vie, il est bon pour se faire interner.

Matthieu MEZIL

# re: Quizz 4 @ mercredi 13 août 2008 00:15

Oui, mais justement, je trouve qu'à part les fonctions ensemblistes (Average, Intersect, etc...) qui sont bien pratiques mais qui tiennent plus de la pure librairie de code que de la révolution technologique, il n'y a pas grand chose de neuf là dedans.

D'ailleurs, on peut très bien les utiliser en C#2. Le code suivant fonctionne très bien en C#2 avec VS2005 par exemple:

static void Main(string[] args)

{

 Type type = Type.GetType("System.Linq.Enumerable, System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

 int[] ints = new int[] { 1, 2, 19 };

 object o = type.InvokeMember("Average", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new object[]{ints});

 Console.WriteLine("o=" + o);

}

smo

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01