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