Menambahkan pasangan kunci/nilai hash dengan

Di Ruby, seseorang dapat menambahkan nilai untuk array yang ada menggunakan <<:

a = []
a << "foo"

tapi, anda bisa juga menambahkan pasangan kunci/nilai yang ada hash?

h = {}
h << :key "bar"

Aku tahu yang dapat anda lakukan:

h[:key] = ""
h[:key] << "bar"

tapi yang's tidak aku inginkan.

Terima kasih.

Mengomentari pertanyaan (2)
Larutan

Ada gabung!.

h = {}
h.merge!(key: "bar")
# => {:key=>"bar"}
Komentar (6)

Sejak hash aren't inheren yang dipesan, ada isn't gagasan menambahkan. Ruby hash sejak 1.9 mempertahankan penyisipan order, namun. Berikut ini adalah cara untuk menambahkan baru pasangan kunci/nilai.

Solusi yang paling sederhana adalah

h[:key] = "bar"

Jika anda ingin metode, menggunakan toko:

h.store(:key, "bar")

Jika anda benar-benar, benar-benar ingin menggunakan "sekop" operator (<<), itu sebenarnya adalah menambahkan nilai hash sebagai array, dan anda harus menentukan kunci:


h[:key] 
Komentar (3)

Tidak, aku don't pikir anda dapat menambahkan pasangan kunci/nilai. Satu-satunya hal terdekat yang saya sadar adalah dengan menggunakan toko metode:

h = {}
h.store("key", "value")
Komentar (0)

Mungkin anda ingin Hash#gabung ?

1.9.3p194 :015 > h={}
 => {} 
1.9.3p194 :016 > h.merge(:key => 'bar')
 => {:key=>"bar"} 
1.9.3p194 :017 > 

Jika anda ingin mengubah array di tempat menggunakan gabung!

1.9.3p194 :016 > h.merge!(:key => 'bar')
 => {:key=>"bar"} 
Komentar (3)

Saya harus melakukan hal yang sama tapi aku harus menambahkan nilai dengan tombol yang sama. Ketika saya menggunakan gabungan atau update saya dapat't mendorong nilai-nilai dengan tombol yang sama. Jadi saya harus menggunakan array dari hash.

    my_hash_static = {:header =>{:company => 'xx', :usercode => 'xx', :password => 'xx',
                      :type=> 'n:n', :msgheader => from}, :body=>[]}
    my_hash_dynamic = {:mp=>{:msg=>message, :no=>phones} }        
    my_hash_full = my_hash_static[:body].push my_hash_dynamic
Komentar (0)

Sama seperti mereka, gabung! dan toko mengobati existing hash yang berbeda, tergantung pada keynames, dan oleh karena itu akan mempengaruhi preferensi anda. Selain itu dari sintaks pandang, gabung!'s kunci: "nilai" sintaks erat pertandingan melawan JavaScript dan Python. I've selalu membenci koma memisahkan pasangan kunci-nilai pribadi.

hash = {}
hash.merge!(key: "value")
hash.merge!(:key => "value")
puts hash

{:kunci=>"nilai"}

hash = {}
hash.store(:key, "value")
hash.store("key", "value")
puts hash

{:kunci=>"nilai", "kunci"=>"nilai"}

Untuk mendapatkan sekop operator << bekerja, saya akan menyarankan menggunakan Mark Thomas's jawaban.

Komentar (0)