Jika Anda memiliki dua hash, optionsdan defaults, dan Anda ingin menggabungkan defaultske dalam optionstanpa Timpa kunci yang ada, apa yang Anda benar-benar ingin lakukan adalah kebalikan: merge optionske defaults:
options = defaults.merge(options)
Atau, jika Anda menggunakan Rails yang dapat Anda lakukan:
Jika masalah Anda adalah bahwa hash asli dan yang kedua mungkin memiliki kunci duplikat dan Anda tidak ingin menimpa di kedua arah, Anda mungkin harus menggunakan penggabungan manual sederhana dengan semacam pemeriksaan dan penanganan tabrakan:
Jelas, ini sangat sederhana dan mengasumsikan bahwa hash1 tidak memiliki kunci yang disebut "hash2-originated-whatever" - Anda mungkin lebih baik hanya menambahkan angka pada kunci sehingga menjadi key1, key2 dan seterusnya sampai Anda menekan salah satu yang belum ada di hash1. Juga, saya belum melakukan ruby selama beberapa bulan sehingga mungkin secara sintaksis tidak benar, tetapi Anda harus bisa mendapatkan intinya.
Alternatifnya mendefinisikan kembali nilai kunci sebagai array sehingga hash1 [kunci] mengembalikan nilai asli dari hash1 dan nilai dari hash2. Tergantung apa yang Anda inginkan, hasil Anda sebenarnya.
Bagaimana jika tidak menyimpan kedua kunci, tetapi menambahkan nilai-nilai dari kunci yang sama?
Tom KC Chiu
1
@ TomK.C.Chiu Itu akan sangat tergantung pada keadaan yang kita tidak bisa menilai dari pertanyaan - bagaimana jika nilai-nilai dalam hash1 adalah string dan hash2 adalah bilangan bulat? Untuk beberapa kasus yang mungkin menjadi opsi yang layak, tetapi lebih sering itu akan menyebabkan masalah - saran menggunakan daftar untuk nilai-nilai bekerja dengan sangat bersih.
glenatron
0
Di sini Anda dapat menggabungkan 2 hash Anda dengan reverse_merge
order ={
id:33987,
platform:'web'}
user ={
name:'Jhon Doe',
email:'[email protected]'}
newHash = oder.reverse_merge!(user)
render json:{ data: newHash, status:200}
Jika Anda ingin menggabungkan kedua hash optionsdan defaultstanpa menimpa hash tujuan, Anda dapat memeriksa selectapakah kunci sudah ada di hash tujuan. Inilah solusi Ruby murni tanpa Rails:
Jawaban:
Jika Anda memiliki dua hash,
options
dandefaults
, dan Anda ingin menggabungkandefaults
ke dalamoptions
tanpa Timpa kunci yang ada, apa yang Anda benar-benar ingin lakukan adalah kebalikan: mergeoptions
kedefaults
:Atau, jika Anda menggunakan Rails yang dapat Anda lakukan:
sumber
reverse_merge!
karena masalah keamanan di rel 5.1Ada cara di pustaka Ruby standar untuk menggabungkan Hash tanpa menimpa nilai yang ada atau menugaskan kembali hash.
sumber
Jika masalah Anda adalah bahwa hash asli dan yang kedua mungkin memiliki kunci duplikat dan Anda tidak ingin menimpa di kedua arah, Anda mungkin harus menggunakan penggabungan manual sederhana dengan semacam pemeriksaan dan penanganan tabrakan:
Jelas, ini sangat sederhana dan mengasumsikan bahwa hash1 tidak memiliki kunci yang disebut "hash2-originated-whatever" - Anda mungkin lebih baik hanya menambahkan angka pada kunci sehingga menjadi key1, key2 dan seterusnya sampai Anda menekan salah satu yang belum ada di hash1. Juga, saya belum melakukan ruby selama beberapa bulan sehingga mungkin secara sintaksis tidak benar, tetapi Anda harus bisa mendapatkan intinya.
Alternatifnya mendefinisikan kembali nilai kunci sebagai array sehingga hash1 [kunci] mengembalikan nilai asli dari hash1 dan nilai dari hash2. Tergantung apa yang Anda inginkan, hasil Anda sebenarnya.
sumber
Di sini Anda dapat menggabungkan 2 hash Anda dengan
reverse_merge
sumber
Jika Anda ingin menggabungkan kedua hash
options
dandefaults
tanpa menimpa hash tujuan, Anda dapat memeriksaselect
apakah kunci sudah ada di hash tujuan. Inilah solusi Ruby murni tanpa Rails:Atau jika kunci ada, tetapi berisi
nil
dan Anda ingin menimpanya:sumber