Saya baru dalam pemrograman. Dapatkah seseorang menjelaskan apa yang .map
akan dilakukan di:
params = (0...param_count).map
ruby
map
range
enumeration
kentang besar
sumber
sumber
map
adalah metode "fungsional" umum yang ditemukan pada objek Enumerable yang digunakan untuk mengubah nilai-nilai dalam urutan (dengan pertimbangan khusus)...
dan...
cara membuat rentang. Juga, biasakan diri dengan REPL, di mana Anda dapat mencoba sendiri hal-hal ini! :)Jawaban:
The
map
Metode mengambil obyek enumerable dan blok, dan berjalan blok untuk setiap elemen, keluaran setiap nilai kembali dari blok (objek asli tidak berubah kecuali jika Anda menggunakanmap!)
:Array
danRange
merupakan tipe enumerable.map
dengan blok mengembalikan Array.map!
bermutasi array asli.Di mana ini membantu, dan apa perbedaan antara
map!
daneach
? Berikut ini sebuah contoh:Hasil:
sumber
map
seolah-olahmap!
map
, bersama denganselect
daneach
merupakan salah satu workhorses Ruby dalam kode saya.Ini memungkinkan Anda untuk menjalankan operasi pada setiap objek array Anda dan mengembalikan semuanya di tempat yang sama. Contohnya adalah menambah array angka dengan satu:
Jika Anda dapat menjalankan metode tunggal pada elemen array Anda, Anda dapat melakukannya dengan gaya tulisan singkat seperti:
Untuk melakukan ini dengan contoh di atas Anda harus melakukan sesuatu seperti ini
Untuk lebih mudah menggunakan teknik ampersand shortcut, mari kita gunakan contoh berbeda:
Mengubah data di Ruby seringkali melibatkan
map
operasi kaskade . Pelajarimap
&select
, mereka adalah beberapa metode Ruby paling berguna di perpustakaan utama. Mereka sama pentingnya denganeach
.(
map
juga merupakan alias untukcollect
. Gunakan apa pun yang terbaik untuk Anda secara konseptual.)Informasi lebih bermanfaat:
Jika objek Enumerable yang Anda jalankan
each
ataumap
aktif berisi sekumpulan elemen Enumerable (hashes, array), Anda dapat mendeklarasikan masing-masing elemen di dalam pipa blok Anda seperti:Dalam kasus Hash (juga sebuah
Enumerable
objek, Hash hanyalah sebuah array tupel dengan instruksi khusus untuk penerjemah). "Parameter pipa" pertama adalah kuncinya, yang kedua adalah nilainya.Untuk menjawab pertanyaan aktual:
Dengan asumsi itu
params
adalah hash, ini akan menjadi cara terbaik untuk memetakannya: Gunakan dua parameter blok alih-alih satu untuk menangkap pasangan kunci & nilai untuk setiap tuple yang ditafsirkan dalam hash.sumber
NoMethodError: private method 'plusone' called for 1:Fixnum
ruby 2 dan 'salah jumlah args' di ruby 1.9 / 1.8. Pokoknya, saya menggunakan lambda:plusone = ->(x) { x + 1 }
kemudian mengambil keluar specifier simbol:[1,2,3].map(&plusone)
.private
di dalam kelas di mana Anda meletakkan metode Anda sebelum Anda meletakkan metode AndaMenggunakan ruby 2.4 Anda dapat melakukan hal yang sama menggunakan
transform_values
, fitur ini diekstraksi dari rel ke ruby.sumber
0..param_count
berarti "hingga dan termasuk param_count".0...param_count
berarti "hingga, tetapi tidak termasuk param_count".Range#map
tidak mengembalikanEnumerable
, sebenarnya memetakannya ke array. Itu sama denganRange#to_a
.sumber
Ini "memetakan" fungsi untuk setiap item dalam
Enumerable
- dalam hal ini, rentang. Jadi itu akan memanggil blok yang dilewati satu kali untuk setiap bilangan bulat dari 0 hinggaparam_count
(eksklusif - Anda benar tentang titik-titik) dan mengembalikan array yang berisi setiap nilai kembali.Inilah dokumentasi untuk
Enumerable#map
. Itu juga memiliki aliascollect
,.sumber
Range#map
sebenarnya mengubahnya menjadi sebuah array.Enumerable
, seperti masing-masing. Saya pikir itu terjadi.Peta adalah bagian dari modul enumerable. Sangat mirip dengan "kumpulkan" Misalnya:
Peta menyediakan nilai yang berulang melalui array yang dikembalikan oleh parameter blok.
sumber
#each
#each
menjalankan fungsi untuk setiap elemen dalam array. Dua kutipan kode berikut ini setara:#map
#map
menerapkan fungsi ke setiap elemen array, mengembalikan array yang dihasilkan. Berikut ini adalah setara:#map!
#map!
seperti#map
, tetapi memodifikasi array di tempatnya. Berikut ini adalah setara:sumber