Haskell의 map 함수에 해당하는 C #은 무엇입니까?


80

Haskell의 map 함수에는 두 개의 입력 매개 변수가 있습니다. 첫 번째 매개 변수는 함수이고 두 번째 매개 변수는 목록입니다. map 함수는 입력 매개 변수로 전달 된 함수를 목록의 모든 요소에 적용하고 새 목록을 반환합니다.

이 기능에 해당하는 C #이 있습니까?


1
F #을 확인하는 것이 좋습니다. C #과 Haskell의 격차를 해소합니다.
ChaosPandion

3
별로. "OCaml for .NET"에 가깝습니다.
jrockway

2
모든 ML 계열 언어 (F # 및 Haskell 포함)는 C 계열 언어보다 서로 공통점이 더 많다는 것은 말할 것도 없습니다. F #을 처리 할 수있는 사람은 누구나 Haskell 또는 OCaml도 처리 할 수 ​​있습니다.
CA McCann

1
@jrockway, @camccann : 저는 언어 구문에 대해 말하는 것이 아닙니다. 나는 F #이 항상 순수한 기능적 스타일을 사용하도록 강요하지 않는다는 사실을 의미합니다.
ChaosPandion

답변:


94

Select

MSDN 참조

여기 내 질문을 참조 하십시오 (직접 관련이 없기 때문에 궁금한 경우에만).


8
고마워요 ... 이것은 약간 직관적입니다. Select가 컬렉션에서 행을 필터링한다고 생각했습니다.
BM.

8
내 질문을 확인하시기 바랍니다.
ChaosPandion

1
BM : 필터링은 Where에서 비롯됩니다.
Edward KMETT

21

Selectand 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);
}

이 달콤한 확장 방법에 대해 Wes Dyer에게 감사드립니다! :) 자세한 내용은 게시물 을 참조하십시오.


15

이후 SelectSelectMany: 이미 언급 한, 당신이 요청하지 않은 추가 질문 답변 해 드리겠습니다 fold로 발견된다 집계를 .

이제이 글을 읽는 모든 사람은 Language Y 관용구를 사용하여 Language X를 작성하는 That Guy가 될 수있는 모든 준비를 갖추어야합니다. 따라서 동료 C # 프로그래머를 위해 너무 성급하게 생각하지 마십시오 .


4
이제 camccann, 도구 상자에 기능성 렌치를 던지는 것은 반드시 못을 박는다고해도 문제가 없습니다. 몇 개의 볼트를 조여야 할 수도 있습니다.
ChaosPandion

4
@camccan Functional C #은 정말 좋습니다. 언어가 엄격하게 작동하지 않는다고해서 대부분의 .net 프로그래머가 훨씬 더 기능적으로 물건을 구축하는 것이 큰 혜택을받지 못한다는 의미는 아닙니다 .

4
C #에서 제공하는 함수형 프로그래밍 기능을 사용하는 것은 좋은 생각입니다. 반면에 C #이 잘 지원되지 않는 기능적 관용구 (예 : Haskell에서 매우 인기있는 커리 부분 응용 프로그램)로 강제 적용하면 두통이 생기고 코드가 난독 화되며 작업해야하는 다른 사람을 괴롭힐 것입니다. 그것으로.
CA McCann


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.