¿Cómo puedo realizar listas de comprensión en C#?Introducción a las comprensiones de la lista C#
Respuesta
Si bien esto no es un tutorial, aquí hay un código que ilustra el concepto:
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;
}
Esto no es una lista de comprensión. – erikkallen
Puede utilizar LINQ para hacer expresiones que son similares a las listas por comprensión. Aquí está un sitio que explica un poco:
P @Ian
return (from user in users
where user.Valid
select user.Name).ToArray();
No especificó LINQ, así que fui lo más básico posible. Tu ejemplo es definitivamente preferido. –
encontrado esto cuando yo estaba mirando cómo hacer listas por comprensión en C# ...
Cuando alguien dice listas de comprensión, inmediatamente pienso en Python. El siguiente código genera una lista que tiene este aspecto:
[0,2,4,6,8,10,12,14,16,18]
manera el Python es así:
list = [2*number for number in range(0,10)]
En C#:
var list2 = from number in Enumerable.Range(0, 10) select 2*number;
Ambos métodos son evaluados con pereza.
Una lista La comprensión es un tipo de notación de conjunto en la que el programador puede describir las propiedades que los miembros de un conjunto deben cumplir. Por lo general, se usa para crear un conjunto basado en otros conjuntos o conjuntos ya existentes al aplicar algún tipo de combinación, función de transformación o reducción a los conjuntos existentes.
Considere el siguiente problema: Tiene una secuencia de 10 números del 0 al 9 y necesita extraer todos los números pares de esa secuencia. En un lenguaje C# versión de tales 1.1, que eran prácticamente confinada al código siguiente para resolver este problema:
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++;
}
El código anterior no muestra la implementación de la función Rango, que está disponible en el código completo listado a continuación. Con la llegada de C# 3.0 y .NET Framework 3.5, una notación de Comprensión de listas basada en Linq ahora está disponible para los programadores de C#. El código C# 1.1 anterior puede ser portado a C# 3.0, así:
IEnumerable<int> numbers = Enumerable.Range(0, 10);
var evens = from num in numbers where num % 2 == 0 select num;
Y técnicamente hablando, el código C# 3.0 arriba puede ser escrito como una sola línea moviendo la llamada a Enumarable.Range a la Expresión de Linq que genera la secuencia evens. En la Comprensión de lista C#, estoy reduciendo los números establecidos al aplicar una función (el módulo 2) a esa secuencia. Esto produce la secuencia evens de una manera mucho más concisa y evita el uso de la sintaxis de bucle. Ahora, usted puede preguntarse: ¿esto es puramente sintaxis? No lo sé, pero definitivamente investigaré, e incluso haré la pregunta yo mismo aquí. Sospecho que esto no es solo azúcar de sintaxis y que hay algunas optimizaciones verdaderas que se pueden hacer al utilizar las mónadas subyacentes.
El listado de código completo está disponible here.
- 1. Learning Haskell: enumera las comprensiones en C#
- 2. 'unificación' en la lista de comprensiones
- 3. Filtro con Lista CoffeeScript comprensiones
- 4. Perl equivalente a las comprensiones de la lista de Python con la instrucción if incrustada?
- 5. itertools.ifilter vs. filtro vs. lista de comprensiones
- 6. Introducción a C# para usuarios de C/C++
- 7. Introducción a la programación de socket en C# - Mejores prácticas
- 8. Muéstrame algunas comprensiones geniales de la lista de Python
- 9. Comprensiones de la lista de Python División del bucle variable
- 10. Introducción a la interacción de bases de datos con C#
- 11. Introducción a la programación de la GUI con c
- 12. Introducción a los punteros inteligentes en C++
- 13. Problema al comprender la lista de Python comprensiones
- 14. ¿Mejor introducción a la metaprogramación de plantillas C++?
- 15. ¿Cuándo son vagos las comprensiones de Scala?
- 16. 64 bit Introducción a la Asamblea
- 17. Introducción a la supervisión de SNMP
- 18. Introducción a Mercurial
- 19. Introducción a la asincronía no roscada IO para C++?
- 20. Introducción a la red cliente-servidor
- 21. Introducción a Core Data
- 22. ¿Enumera comprensiones y condiciones?
- 23. ¿Por qué se "desaprobó" en "F" las comprensiones?
- 24. Introducción a la programación de GPU
- 25. introducción a la prueba unitaria en javascript
- 26. Introducción a unittest ++
- 27. Introducción a jBPM
- 28. Contando elementos enteros positivos en una lista con la lista de Python comprensiones
- 29. ¿Qué debería llamar una función REBOL que enumera las comprensiones?
- 30. Introducción a Java Graphics Libraries
Supongo que te refieres al inicializador de colecciones cuando dices lista de comprensión. ¿Correcto? – erikkallen