Nie ma różnicy, w rzeczywistości mapjest zaimplementowane w C jako rb_ary_collecti enum_collect(np. Istnieje różnica między maptablicą a dowolnym innym wyliczeniem, ale nie ma różnicy między mapi collect).
Dlaczego oba mapi collectistnieją w Ruby? mapFunkcja 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 transformw 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 mapwe 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).collectmapcar
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 eachmetoda).
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ć, eachale może używać tylko prostej manipulacji wskaźnikiem, która jest znacznie szybsza.
Podobne optymalizacje istnieją dla wielu metod Array, takich jak ziplub count.
mapjest preferowany w Code Golf .