Nie ma różnicy, w rzeczywistości map
jest zaimplementowane w C jako rb_ary_collect
i enum_collect
(np. Istnieje różnica między map
tablicą a dowolnym innym wyliczeniem, ale nie ma różnicy między map
i collect
).
Dlaczego oba map
i collect
istnieją w Ruby? map
Funkcja ma wiele nazewnictwa w różnych językach. Wikipedia zawiera przegląd :
Funkcja map pochodzi z funkcjonalnych języków programowania, ale obecnie jest obsługiwana (lub może być zdefiniowana) również w wielu językach proceduralnych, obiektowych i wieloparadygmatycznych: w standardowej bibliotece szablonów C ++ jest ona nazywana transform
w języku C # (3.0) Biblioteka LINQ jest dostarczana jako metoda rozszerzenia o nazwie Select
. Mapa jest również często używaną operacją w językach wysokiego poziomu, takich jak Perl, Python i Ruby; operacja jest wywoływana map
we wszystkich trzech tych językach. Alias mapie jest również Ruby (z Smalltalku) [nacisk kopalni]. Common Lisp zapewnia rodzinę funkcji podobnych do mapy; to odpowiadające opisanemu tutaj zachowaniu nazywa się (-car wskazuje dostęp za pomocą operacji CAR).collect
mapcar
Ruby zapewnia alias dla programistów ze świata Smalltalk, aby czuli się jak w domu.
Dlaczego istnieje inna implementacja tablic i wyliczeń? Wyliczenie jest uogólnioną strukturą iteracyjną, co oznacza, że Ruby nie jest w stanie przewidzieć, jaki może być następny element (możesz zdefiniować nieskończone wyliczenia, patrz przykład Prime ). Dlatego musi wywoływać funkcję, aby uzyskać każdy kolejny element (zazwyczaj będzie to each
metoda).
Tablice są najczęstszą kolekcją, więc rozsądne jest zoptymalizowanie ich wydajności. Ponieważ Ruby wie dużo o tym, jak działają tablice, nie musi wywoływać, each
ale może używać tylko prostej manipulacji wskaźnikiem, która jest znacznie szybsza.
Podobne optymalizacje istnieją dla wielu metod Array, takich jak zip
lub count
.
map
jest preferowany w Code Golf .