¿Cuál es el equivalente en C # de la función de mapa en Haskell?

80

La función map 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 de la lista y devuelve una nueva lista.

¿Existe un equivalente en C # para esta funcionalidad?

BM.
fuente
1
Es posible que desee comprobar F #. Cierra la brecha entre C # y Haskell.
ChaosPandion
3
Realmente no. Es más como "OCaml para .NET".
jrockway
2
Sin mencionar que todos los idiomas de la familia ML (incluidos F # y Haskell) posiblemente tienen más en común entre sí que con cualquier idioma de la familia C; cualquiera que pueda manejar F # probablemente también pueda manejar Haskell u OCaml.
CA McCann
1
@jrockway, @camccann: No estoy hablando de la sintaxis del lenguaje. Me refiero al hecho de que F # no te obliga a usar siempre un estilo funcional puro.
ChaosPandion

Respuestas:

94

Select

Referencia de MSDN

Vea mi pregunta aquí (solo si tiene curiosidad, ya que no está directamente relacionada).

ChaosPandion
fuente
8
Gracias ... Esto es un poco contrario a la intuición, estaba pensando que Select filtraría filas de una colección.
BM.
8
Realmente espero que lean mi pregunta.
ChaosPandion
1
BM: El filtrado viene de Dónde.
Edward KMETT
21

Otra alternativa a Selecty SelectManyes 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 publicación para más detalles.

Annie Lagang
fuente
15

Dado que Selecty SelectManyya se mencionaron, responderé una pregunta adicional que no hizo: foldse encuentra como agregado .

Ahora todos los que lean esto debe ser totalmente equipada para ir ser ese hombre que escribe Idioma X usando expresiones idiomáticas Lenguaje Y ... así que por el bien de sus compañeros programadores de C #, no reciben demasiado llevar.

CA McCann
fuente
4
Ahora camccann, no hay nada de malo en tirar una llave funcional en su caja de herramientas aunque esté clavando clavos imperativamente. Puede que tenga que apretar algunos tornillos.
ChaosPandion
4
@camccan Functional C # es 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 de construir cosas de manera mucho más funcional.
4
Usar las características de programación funcional que ofrece C # es una gran idea. Forzar a C # en modismos 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 cualquiera que tenga que trabajar. con eso.
CA McCann
3

¿Qué hay de ConvertAll ? Parece el más cercano al mapa.

Adway Lele
fuente