Comment effectuer des compréhensions de liste en C #?
Réponses
Trop de publicités?Une Compréhension de Liste est un type de notation dans lequel le programmeur peut décrire les propriétés que les membres d'un ensemble doit répondre. Il est généralement utilisé pour créer un jeu basé sur d'autres, déjà existant, ou les ensembles de par l'application d'un type de combinaison, de transformer ou de la fonction de réduction de l'existant(s).
Considérons le problème suivant: Vous avez une séquence de 10 chiffres de 0 à 9 et vous avez besoin d'extraire tous les numéros de cette séquence. Dans un langage tel un C# version 1.1, vous avez été assez bien confiné au code suivant pour résoudre ce problème:
ArrayList evens = new ArrayList();
ArrayList numbers = Range(10);
int size = numbers.Count;
int i = 0;
while (i < size)
{
if (i % 2 == 0)
{
evens.Add(i);
}
i++;
}
Le code ci-dessus ne montre pas la mise en œuvre de la fonction Range, qui est disponible dans le code complet d'inscription ci-dessous. Avec l'avènement de C# 3.0 et de l' .NET Framework 3.5, une Liste de Compréhension de la notation basée sur Linq est maintenant disponible C#, programmeurs. Le ci-dessus C# 1.1 code peut être porté à C# 3.0 comme suit:
IEnumerable<int> numbers = Enumerable.Range(0, 10);
var evens = from num in numbers where num % 2 == 0 select num;
Et techniquement parlant, le C# 3.0 code ci-dessus peut être écrit comme un one-liner en déplaçant l'appel à Enumarable.Portée de l'expression Linq qui génère les evens séquence. Dans le C# Compréhension de Liste je suis la réduction de l'ensemble des nombres par l'application d'une fonction (le modulo 2) à cette séquence. Ce produit de la evens séquence dans une beaucoup plus concis et éviter l'utilisation de la boucle de la syntaxe. Maintenant, vous pouvez vous demander: Est-ce purement syntaxe de sucre? Je ne sais pas, mais je vais definitelly étudier, et peut-être même se poser la question moi-même ici. Je soupçonne que ce n'est pas seulement la syntaxe de sucre et qu'il y a quelques optimisations qui peut être fait en utilisant les sous-jacents des monades.
Le code complet d'inscription est disponible ici.
J'ai trouvé cela quand je cherchais comment faire des listes de compréhension en C # ...
Quand quelqu'un dit des compréhensions de liste, je pense immédiatement à Python. Le code ci-dessous génère une liste qui ressemble à ceci:
[0,2,4,6,8,10,12,14,16,18]
La manière Python est comme ceci:
list = [2*number for i in range(0,10)]
En C #:
var list2 = from number in 0.To(10) select 2*number;
Les deux méthodes sont évaluées paresseusement.
Vous pouvez utiliser LINQ pour créer des expressions similaires aux listes de compréhension. Voici un site qui l'explique un peu: