Solo trato de ver si C # select tiene las mismas capacidades como el mapa de javascript o no (haciendo algunos cálculos y luego regresando al final).
Por ejemplo:
const numberList = [1,2,3,4,5]; const newNumberList = numberList.map(number => { const modifiedNumber = number * 2; return modifiedNumber; })Sí, en este ejemplo, solo puedo hacer número => número * 2. Pero me pregunto por escenarios más complejos en los que necesito hacer algunas llamadas a funciones para averiguar algunos valores y luego usarlos y devolver una lista en el final.
Tienes tres opciones, una de las cuales ya has señalado.
Una sola declaración lambda
int[] numbers = { 1, 2, 3, 4, 5 }; int[] newNumbers = numbers.Select(x => x * 2).ToArray();Dos - lambda de varias declaraciones
int[] newNumbers = numbers .Select(x => { var newVal = x * 2; return newVal; }) .ToArray();Tres: use un método real (en lugar de un método anónimo)
private static int MultByTwo(int val) { return val * 2; } // ... int[] newNumbers = numbers.Select(MultByTwo).ToArray(); Tenga en cuenta que no escribe MultByTwo() , es solo el nombre del método.
Sí, Select es el equivalente de map . De hecho, LINQ es una interfaz funcional sobre IEnumerable<T> al igual que la implementación de JS en matrices. la firma es:
IEnumerable<T> => (T => R) => IEnumerable<R>
Siempre que cumpla con el contrato Select , puede escribir un código más complejo que llame a funciones que llamen a otras funciones y así sucesivamente.