Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Quizz LINQ : La liste des nombres premiers en 3 clauses ?

Visual Studio 2008Si LINQ n'est plus ou moins qu'un sucre syntaxique (ça se traduit comme ça ?) par rapport à ce que l'on peut déjà faire avec .NET 2.0, il permet néanmoins de réduire le code, souvent de quelques lignes, et parfois de façon assez impressionnante. Par contre la densité de réflexion par ligne de code augmente. Je suis donc ravi, puisque j'adore me creuser les méninges en écrivant (du code).

Aujourd'hui je vous propose de vous creuser les méninges, et de tester vos connaissances en LINQ :

Qui est capable de m'écrire une requête qui renvoie une énumération des nombres premiers de 1 à n (n étant un integer), en 3 clauses (from incluse) ?

Réponse :

Miiitch a en effet la bonne réponse, en simplifiant un peu (et avec des couleurs), cela donne ça :

Func<int, IEnumerable<int>> nombresPremiers = max =>
    from i in Enumerable.Range(2, max - 2)
    where Enumerable.Range(2, i - 2).All(j => i % j != 0)
    select i;

Utilisable ensuite en écrivant par exemple :

IEnumerable<int> result = nombresPremiers(100);

Grâce à l'exécution différée, cette ligne ne fait (presque) rien, et le calcul est effectivement fait lors de l'énumération :

foreach (int i in result)
   
Console.WriteLine(i);

C'est une belle preuve de la puissance et de l'expressivité de LINQ.

Publié lundi 26 novembre 2007 17:38 par RaptorXP
Classé sous : , , , ,
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 :

Commentaires

# re: Quizz LINQ : La liste des nombres premiers en 3 clauses ?

          Func

<int,bool> IsDivisible = number =&gt; number &lt; 4? false :Enumerable.Range(2,number-3).Any(nb=&gt; (number %nb)==0);

           Func<int, IEnumerable<int="">&gt; PrimeList = maxVal =&gt; from intVal in Enumerable.Range(1, maxVal) where !IsDivisible(intVal) select intVal;

           var liste = PrimeList(100);

lundi 26 novembre 2007 20:31 by Miiitch

# re: Quizz LINQ : La liste des nombres premiers en 3 clauses ?

Linq est vraiment un ajout fantastique au langage.

Pour ceux qui ne savent pas encore très bien ce qu'est Linq et surtout comment situer les moultes "saveurs" de Linq (L/object, L/xml, L/sql, L/entities...) un article très complet est téléchargeable ici :

http://www.e-naxos.com/Blog/post.aspx?id=53903699-5ef1-458e-9ad4-112225f37c88

vendredi 14 décembre 2007 16:34 by Merlin
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2010 : La BI dans SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 25 minutes

- TechDays Paris 2010 : Déploiement de nouvelles technologies – Retour d’expérience par l’informatique de Microsoft par Blog Technique de Romelard Fabrice le il y a 1 heure et 52 minutes

- TechDays Paris 2010 : Plan de migration vers SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 5 heures et 35 minutes

- TechDays Paris 2010 : La pleinière du second jour par Blog Technique de Romelard Fabrice le il y a 6 heures et 40 minutes

- Visual Studio 2010 and .NET Framework 4 Release Candidate now available par Matthieu MEZIL le il y a 9 heures et 46 minutes

- Création d’une base de donnée sous SQL Azure par Le Blog (Vert) d'Arnaud JUND le il y a 10 heures et 43 minutes

- TechDays Paris 2010 : Les Services d’applications dans SharePoint 2010 par Blog Technique de Romelard Fabrice le il y a 20 heures et 42 minutes

- TechDays Paris 2010 : La GED et SharePoint 2010 par Blog Technique de Romelard Fabrice le 02-08-2010, 16:54

- TechDays Paris 2010 : SharePoint 2010 et Les réseaux sociaux par Blog Technique de Romelard Fabrice le 02-08-2010, 15:40

- TechDays Paris 2010 : SharePoint 2010 – Description et nouveautés par Blog Technique de Romelard Fabrice le 02-08-2010, 14:33