什么是Haskell中C#等效的map函数

BM.*_*BM. 71 c#

Haskell中的map函数有两个输入参数.第一个参数是函数,第二个参数是列表.map函数将作为输入参数传递的函数应用于列表中的所有元素,并返回一个新列表.

C#是否等同于此功能?

Cha*_*ion 87

Select

MSDN参考

在这里看我的问题(只有你好奇,因为它没有直接相关).

  • 谢谢......这有点反直觉,我在想,Select会过滤集合中的行. (8认同)
  • 我真的希望你看看我的问题. (8认同)
  • BM:过滤来自哪里。 (2认同)

Ann*_*ang 20

另一个备选方案Select,并SelectMany为编写自己的扩展方法.

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

谢谢Wes Dyer这个甜蜜的扩展方法!:)查看帖子了解更多详情.


C. *_*ann 15

由于SelectSelectMany已经提到的,我会回答一个额外的问题,你没有问:fold发现为骨料.

现在每个读这篇文章的人都应该有足够的能力成为那个使用Language Y成语写出语言X的家伙......所以为了你的C#程序员,不要太过于沮丧.

  • 现在camccann,即使您必须锤击钉子,将功能扳手扔进工具箱也没有错.你可能需要拧紧几个螺栓. (4认同)
  • @camccan Functional C#真的很不错.仅仅因为语言不是严格的功能并不意味着大多数.net程序员不会从功能上构建更多东西中获益. (4认同)
  • 使用C#提供的函数式编程功能是一个好主意.另一方面,强迫C#成为不支持的功能习惯用语(比如,在Haskell中非常流行的curried部分应用程序),可能会让你头疼,混淆你的代码,并惹恼任何其他必须工作的人用它. (3认同)

Eri*_*ert 11

为了回答你没有问过的问题,Haskell相当于绑定"序列"monad在C#中称为SelectMany.有关详细信息,请参阅Wes Dyer关于此的精彩文章:

http://blogs.msdn.com/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx