Quizz LINQ : La liste des nombres premiers en 3 clauses ?
Si 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.
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 :