Haskellのmap関数に相当するC#とは何ですか


80

Haskellのmap関数には2つの入力パラメーターがあります。最初のパラメーターは関数で、2番目のパラメーターはリストです。map関数は、入力パラメーターとして渡された関数をリスト内のすべての要素に適用し、新しいリストを返します。

この機能に相当するC#はありますか?


1
F#を確認することをお勧めします。C#とHaskellの間のギャップを埋めます。
ChaosPandion 2010年

3
あんまり。それは「OCamlfor.NET」のようなものです。
jrockway 2010年

2
言うまでもなく、すべてのMLファミリー言語(F#とHaskellを含む)は、Cファミリー言語よりも互いに共通していることは間違いありません。F#を処理できる人なら誰でも、おそらくHaskellやOCamlも処理できます。
CA McCann 2010年

1
@ jrockway、@ camccann:私は言語の構文について話していません。F#では、常に純粋な関数型スタイルを使用する必要はありません。
ChaosPandion 2010年

回答:


94

Select

MSDNリファレンス

ここで私の質問を参照してください(直接関係がないため、興味がある場合のみ)。


8
ありがとう...これは少し直感的ではありません。Selectがコレクションから行をフィルタリングすると思っていました。
BM。

8
私の質問をチェックしていただければ幸いです。
ChaosPandion 2010年

1
BM:フィルタリングはどこから来るのですか。
エドワードKMETT 2010年

21

Selectおよびのもう1つの代替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);
}

この甘い拡張方法を提供してくれたWesDyerに感謝します。:)詳細については、投稿を参照してください。


15

SelectSelectManyはすでに言及されているので、あなたが尋ねなかった追加の質問に答えます:Aggregatefoldとして見つかります。

これを読んでいるすべての人は、言語Yのイディオムを使用して言語Xを作成するThat Guyになるための準備が整っているはずです...したがって、仲間のC#プログラマーのために、あまり夢中にならないでください。


4
今度はcamccannですが、必然的に釘を打っていても、機能的なレンチをツールボックスに投げ込むことに何の問題もありません。いくつかのボルトを締める必要があるかもしれません。
ChaosPandion 2010年

4
@camccan機能C#は本当にかなり良いです。言語は、厳密に機能していないという理由だけで、ほとんどの.NETプログラマは非常物事を構築するの恩恵を受けるないことを意味するものではありません多くの、より機能的に。

4
C#が提供する関数型プログラミング機能を使用することは素晴らしいアイデアです。一方、C#をうまくサポートしない機能的なイディオム(たとえば、Haskellで非常に人気のあるカレー部分適用)に強制すると、おそらく頭痛の種になり、コードが難読化され、作業しなければならない他の人を苛立たせます。それと。
CA McCann

11

そして、あなたが尋ねなかった質問に答えるために、「シーケンス」モナドをバインドすることに相当するHaskellは、C#ではSelectManyと呼ばれます。詳細については、これに関するWesDyerのすばらしい記事を参照してください。

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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.