Tidak ada perbedaan, sebenarnya map
diimplementasikan dalam C as rb_ary_collect
dan enum_collect
(mis. Ada perbedaan antara map
pada array dan pada enum lainnya, tetapi tidak ada perbedaan antara map
dan collect
).
Mengapa keduanya map
dan collect
ada di Ruby? The map
fungsi 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 map
dalam ketiga bahasa ini. Sebuah collect
alias 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 each
tetapi hanya dapat menggunakan manipulasi pointer sederhana yang jauh lebih cepat.
Optimalisasi serupa ada untuk sejumlah metode Array seperti zip
atau count
.
map
lebih disukai di Code Golf .