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

- MBA : Pourquoi faire et comment le choisir ? par Blog Technique de Romelard Fabrice le il y a 16 heures et 12 minutes

- Y'a des erreurs qui peuvent rendre le développeur violent par Aleks's Blog le 02-02-2012, 16:33

- [Hyper-V 3] Présentation des commandlets PowerShell par Blog de SPBrouillet (Pierrick BROUILLET) le 01-31-2012, 16:01

- IIS7 – Compression GZIP par Atteint de JavaScriptite Aiguë [Cyril Durand] le 01-31-2012, 15:52

- SharePoint 15 Technical Preview Managed Object Model Software Development Kit par Matthew le 01-31-2012, 12:34

- Office 15 Technical Preview - Open specification Update par Matthew le 01-31-2012, 10:14

- TFS Integration Tools – Installation par Vivien Fabing le 01-31-2012, 00:06

- Test par RonnyK le 01-30-2012, 16:56

- [SharePoint 2010] Désactiver le correcteur orthographique dans les pages d’un site de publication par Jean-Christophe Brabant le 01-30-2012, 09:30

- [SharePoint 2010] Site internet et performances : poids et nombre des ressources par Arnault Nouvel le 01-30-2012, 00:52