Pertanyaan Bagaimana cara memodifikasi array saat saya melakukan iterasi di Ruby?


Saya baru saja belajar Ruby, jadi mohon maaf jika ini terlalu newbie untuk di sini, tapi saya tidak bisa mengetahuinya dari buku beliung (mungkin tidak cukup membaca dengan hati-hati). Lagi pula, jika saya memiliki array seperti ini:

arr = [1,2,3,4,5]

... dan saya ingin, katakanlah, kalikan setiap nilai dalam larik dengan 3, saya telah melakukan yang melakukan hal berikut:

arr.each {|item| item *= 3}

... tidak akan mendapatkan apa yang saya inginkan (dan saya mengerti mengapa, saya tidak memodifikasi array itu sendiri).

Yang tidak saya dapatkan adalah bagaimana memodifikasi array asli dari dalam blok kode setelah iterator. Saya yakin ini sangat mudah.


76
2017-11-21 00:07


asal


Jawaban:


Menggunakan map untuk membuat array baru dari yang lama:

arr2 = arr.map {|item| item * 3}

Menggunakan map! untuk memodifikasi array di tempat:

arr.map! {|item| item * 3}

Lihat bekerja online: ideone


121
2017-11-21 00:09



Untuk langsung memodifikasi larik, gunakan arr.map! {|item| item*3}. Untuk membuat array baru berdasarkan aslinya (yang sering lebih disukai), gunakan arr.map {|item| item*3}. Bahkan, saya selalu berpikir dua kali sebelum menggunakan each, karena biasanya ada fungsi tingkat tinggi seperti map, select atau inject itu yang saya inginkan.


16
2017-11-21 00:44



arr.collect! {|item| item * 3}

5
2018-06-06 12:57