Comment puis-je effectuer des compréhensions de liste en C#?Introduction aux compréhensions de liste C#
Répondre
Bien que ce n'est pas un tutoriel, voici un code qui illustre le concept:
public List<string> ValidUsers(List<User> users) {
List<string> names = new List<string>();
foreach(User user in users) {
if(user.Valid) {
names.Add(user.Name);
}
}
return names;
}
Ceci n'est pas une compréhension de liste. – erikkallen
Vous pouvez utiliser LINQ pour faire des expressions similaires à la liste compréhensions. Voici un site qui explique un peu:
@Ian P
return (from user in users
where user.Valid
select user.Name).ToArray();
Il n'a pas spécifié LINQ, je suis donc allé aussi basique que possible. Votre exemple est définitivement préféré. –
trouvé quand je cherchais comment faire compréhensions liste 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 façon Python est comme ceci:
list = [2*number for number in range(0,10)]
En C#:
var list2 = from number in Enumerable.Range(0, 10) select 2*number;
Les deux méthodes sont évaluées paresseusement.
Une compréhension de liste est un type de notation d'ensemble dans lequel le programmeur peut décrire les propriétés que les membres d'un ensemble doivent satisfaire. Il est généralement utilisé pour créer un ensemble basé sur d'autres ensembles ou ensembles existants en appliquant un certain type de combinaison, de transformation ou de réduction aux ensembles existants. Considérez le problème suivant: Vous avez une séquence de 10 nombres compris entre 0 et 9 et vous devez extraire tous les nombres pairs de cette séquence. Dans une langue une telle version C# 1.1, vous avez été à peu près limité 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 ne montre pas au-dessus de la mise en œuvre de la fonction Range, qui est disponible dans le code complet liste ci-dessous. Avec l'avènement de C# 3.0 et du .NET Framework 3.5, une notation List Comprehension basée sur Linq est maintenant disponible pour les programmeurs C#. Le dessus du code C# 1.1 peut être porté à C# 3.0 comme ceci:
IEnumerable<int> numbers = Enumerable.Range(0, 10);
var evens = from num in numbers where num % 2 == 0 select num;
Et techniquement parlant, le code C# 3.0 ci-dessus pourrait être écrit en une ligne en déplaçant l'appel à Enumarable.Range au Expression Linq qui génère la séquence evens. Dans la compréhension de la liste C#, je réduis l'ensemble des numéros en appliquant une fonction (le modulo 2) à cette séquence. Cela produit la séquence evens d'une manière beaucoup plus concise et évite l'utilisation de la syntaxe de boucle. Maintenant, vous pouvez vous demander: est-ce purement de la syntaxe du sucre? Je ne sais pas, mais je vais certainement enquêter, et peut-être même poser la question moi-même ici. Je soupçonne que ce n'est pas seulement du sucre de syntaxe et qu'il y a de vraies optimisations qui peuvent être faites en utilisant les monades sous-jacentes.
La liste complète des codes est disponible here.
- 1. Introduction aux déclencheurs SQL?
- 2. Introduction aux liaisons Python Clutter?
- 3. Introduction aux systèmes d'algèbre informatique?
- 4. Python: exception StopIteration et liste compréhensions
- 5. Problème dans la compréhension des compréhensions de la liste Python
- 6. débutants introduction aux tests unitaires dans Visual Studio 2008
- 7. Compréhensions et conditions?
- 8. valeurs Mise en cache dans la liste Python compréhensions
- 9. Cognos 8 Introduction
- 10. ADO & DAO Introduction
- 11. R application web introduction
- 12. Introduction à Asp.net MVC
- 13. Introduction à Occam 2
- 14. Comment accéder aux éléments de liste dans une liste
- 15. Compréhensions de Scala: caractéristique vitale ou sucre syntaxique?
- 16. Pourquoi Python 2.6 n'a-t-il pas défini des littéraux et des compréhensions ou dicté des compréhensions?
- 17. Liste SharePoint comme l'interface d'accès aux données
- 18. Les compréhensions de listes Python sont-elles identiques à celles de map/grep en Perl?
- 19. Echange de liste 2003 droits de boîte aux lettres
- 20. C# Accès aux données dans System.Object []
- 21. Implications relatives aux performances de diffusion C#
- 22. C++ équivalent aux doctests de Python?
- 23. Alternatives aux crochets de fenêtres en C#?
- 24. C++ Équivalent aux initialiseurs désignés?
- 25. C# liste variable privée
- 26. Liste des fonctions C++
- 27. liste triant dans C#
- 28. C# liste de tableau de l'effondrement
- 29. Où puis-je trouver une introduction à SSL avec OpenSSL?
- 30. Bonne introduction à la programmation des sockets TCP en Java?
Je suppose que vous voulez dire initialisateur de collection quand vous dites compréhension de liste. Correct? – erikkallen