가지 사실에 차이는 없다 map로 C로 구현 rb_ary_collect하고 enum_collect(예. 차이가 map어레이에서 다른 어떤 ENUM에가 있지만 차이 사이 map및 collect).
왜 둘 다 할 map과 collect루비에 존재 하는가? 이 map기능에는 여러 언어로 된 많은 명명 규칙이 있습니다. Wikipedia는 개요를 제공합니다 .
map 함수는 함수형 프로그래밍 언어에서 시작되었지만 오늘날 많은 절차 적, 객체 지향 및 다중 패러다임 언어에서도 지원됩니다 (또는 정의 될 수도 있음). C ++의 표준 템플릿 라이브러리에서는 transformC # (3.0)에서이라고합니다. LINQ 라이브러리는이라는 확장 메소드로 제공됩니다 Select. 맵은 Perl, Python 및 Ruby와 같은 고급 언어에서 자주 사용되는 작업입니다. 이 map세 가지 언어 모두에서 작업이 호출 됩니다. Ruby의 스몰 토크 (Smalltalk) [emphasis mine] 에서도지도 의 collect별칭이 제공됩니다 . 커먼 리스프는 맵과 유사한 기능을 제공합니다. 여기에 설명 된 동작에 해당하는 것을 호출합니다 mapcar(-car는 CAR 조작을 사용하여 액세스를 나타냄).
루비는 스몰 토크 (Smalltalk) 세계의 프로그래머가 집에서 더 많이 느끼도록 별칭을 제공합니다.
왜 배열과 열거 형에 대해 다른 구현이 있습니까? 열거 형은 일반화 된 반복 구조로, Ruby가 다음 요소가 무엇인지 예측할 수있는 방법이 없습니다 (무한 열거 형을 정의 할 수 있습니다 ( 예 : Prime 참조 )). 따라서 각 연속 요소를 가져 오려면 함수를 호출해야합니다 (일반적으로 이것이 each메소드가 됨).
어레이는 가장 일반적인 모음이므로 성능을 최적화하는 것이 합리적입니다. 루비는 배열의 작동 방식에 대해 많이 알고 있기 때문에 호출 each할 필요는 없지만 간단한 포인터 조작 만 사용할 수 있어 훨씬 빠릅니다.
유사 최적화와 같은 배열 방법 중 다수 존재 zip나 count.
mapCode Golf 에서 선호됩니다 .