Tidak ada perbedaan, sebenarnya mapdiimplementasikan dalam C as rb_ary_collectdan enum_collect(mis. Ada perbedaan antara mappada array dan pada enum lainnya, tetapi tidak ada perbedaan antara mapdan collect).
Mengapa keduanya mapdan collectada di Ruby? The mapfungsi memiliki banyak konvensi penamaan dalam bahasa yang berbeda. Wikipedia memberikan gambaran :
Fungsi peta berasal dari bahasa pemrograman fungsional tetapi saat ini didukung (atau dapat didefinisikan) dalam banyak bahasa prosedural, berorientasi objek, dan multi-paradigma: Dalam Pustaka Template Standar C ++, disebut transform, dalam C # (3.0) Pustaka LINQ, disediakan sebagai metode ekstensi yang disebut Select. Peta juga merupakan operasi yang sering digunakan dalam bahasa tingkat tinggi seperti Perl, Python dan Ruby; operasi ini disebut mapdalam ketiga bahasa ini. Sebuah collectalias untuk peta juga disediakan di Ruby (dari Smalltalk) [penekanan saya]. Common Lisp menyediakan sekumpulan fungsi mirip peta; yang sesuai dengan perilaku yang dijelaskan di sini disebut mapcar(-car menunjukkan akses menggunakan operasi CAR).
Ruby menyediakan alias untuk programmer dari dunia Smalltalk untuk merasa lebih di rumah.
Mengapa ada implementasi yang berbeda untuk array dan enum? Enum adalah struktur iterasi yang digeneralisasi, yang berarti bahwa tidak ada cara di mana Ruby dapat memprediksi apa elemen berikutnya (Anda dapat mendefinisikan enum tak terbatas, lihat Prime untuk contoh). Karena itu ia harus memanggil fungsi untuk mendapatkan setiap elemen berurutan (biasanya ini akan menjadieach metode).
Array adalah koleksi paling umum sehingga masuk akal untuk mengoptimalkan kinerjanya. Karena Ruby tahu banyak tentang cara kerja array, ia tidak perlu memanggil eachtetapi hanya dapat menggunakan manipulasi pointer sederhana yang jauh lebih cepat.
Optimalisasi serupa ada untuk sejumlah metode Array seperti zipatau count.
maplebih disukai di Code Golf .