Saya baru saja belajar Ruby, jadi mohon maaf jika ini terlalu pemula untuk di sekitar sini, tapi saya tidak bisa menyelesaikan ini dari buku beliung (mungkin hanya tidak membaca dengan cukup hati-hati). Bagaimanapun, jika saya memiliki array seperti ini:
arr = [1,2,3,4,5]
... dan saya ingin, katakanlah, mengalikan setiap nilai dalam array dengan 3, saya telah menyelesaikannya dengan 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.
Untuk mengubah array secara langsung, gunakan
arr.map! {|item| item*3}
. Untuk membuat array baru berdasarkan yang asli (yang seringkali lebih disukai), gunakanarr.map {|item| item*3}
. Faktanya, saya selalu berpikir dua kali sebelum menggunakaneach
, karena biasanya ada fungsi tingkat tinggi sepertimap
,select
atauinject
itu melakukan apa yang saya inginkan.sumber
arr.map!{ destructive_op}
untuk berubah secara permanenarr
?arr.collect! {|item| item * 3}
sumber