2010-01-26 11 views
62

función de mapa en Haskell tiene dos parámetros de entrada. El primer parámetro es una función y el segundo parámetro es una lista. La función de mapa aplica la función pasada como parámetro de entrada a todos los elementos en la lista y devuelve una nueva lista.¿Cuál es el equivalente C# de la función de mapa en Haskell

¿Hay un C# equivalente a esta funcionalidad?

+1

Es posible que desee comprobar F #. Redondea la brecha entre C# y Haskell. – ChaosPandion

+2

No realmente. Es más como "OCaml para .NET". – jrockway

+2

Sin mencionar que todos los lenguajes de la familia ML (incluyendo F # y Haskell) posiblemente tengan más en común entre sí que con cualquier lenguaje de la familia C; cualquiera que pueda manejar F # probablemente también pueda manejar Haskell u OCaml. –

Respuesta

74

Select

MSDN Reference

Ver mi pregunta here (Sólo si usted es curioso, ya que no está directamente relacionada).

+8

Gracias ... Esto es un poco contrario a la intuición, estaba pensando en que Select filtraría las filas de una colección. –

+7

Realmente espero que mires mi pregunta. – ChaosPandion

+1

BM: El filtrado proviene de Where. –

13

Desde Select y SelectMany ya se mencionó, voy a responder a una pregunta adicional que no pidió: fold se encuentra como Aggregate.

Ahora todos los que lean esto deberían estar completamente equipados para ser ese tipo que escribe Language X usando idiomas Idiom y ... así que por el bien de sus compañeros programadores de C#, no se lleven demasiado.

+4

Ahora camccann, no hay nada de malo con lanzar una llave funcional en su caja de herramientas a pesar de que estás martillando imperativamente las uñas. Es posible que tenga que apretar unos tornillos. – ChaosPandion

+4

@camccan Funcional C# es realmente bastante bueno. El hecho de que el lenguaje no sea estrictamente funcional no significa que la mayoría de los programadores de .net no se beneficiarían enormemente al construir cosas mucho * más funcionalmente. –

+3

Usar las funciones de programación funcional que C# ofrece es una gran idea.Obligar a C# a expresiones funcionales que no admite bien (por ejemplo, aplicación parcial al curry como es tan popular en Haskell), por otro lado, probablemente le dará un dolor de cabeza, ofuscará su código y molestará a cualquier otra persona que tenga que trabajar con eso. –

17

Otra alternativa a Select y SelectMany es escribir su propio método de extensión.

public static IEnumerable<U> Map<T, U>(this IEnumerable<T> s, Func<T, U> f) 
{ 
    foreach (var item in s) 
    yield return f(item); 
} 

Gracias Wes Dyer por este dulce método de extensión! :) Ver post para más detalles.

3

¿Qué tal ConvertAll? Parece más cercano al mapa.

Cuestiones relacionadas