de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 jcarpio
jcarpio
Question

Menambahkan pasangan kunci/nilai hash dengan << di Ruby

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.

72 2013-11-03T18:03:48+00:00 6
Pemrograman
ruby
hash
Solution / Answer
 sawa
sawa
3 November 2013 в 6:22
2013-11-03T18:22:47+00:00
Lebih
Sumber
Sunting
#22701937

Ada gabung!.

h = {}
h.merge!(key: "bar")
# => {:key=>"bar"}
Nic Hartley
Nic Hartley
Jawaban edit 17 Mei 2015 в 1:27
129
0
Mark Thomas
Mark Thomas
3 November 2013 в 7:41
2013-11-03T19:41:14+00:00
Lebih
Sumber
Sunting
#22701938

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] << "bar"

Di atas hanya bekerja ketika ada kunci. Untuk menambahkan sebuah kunci baru, anda harus menginisialisasi hash dengan nilai default, yang dapat anda lakukan seperti ini:

h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"

Anda mungkin tergoda untuk monyet patch Hash untuk memasukkan sekop operator yang bekerja dalam cara anda've tertulis:

class Hash
  def <<(k,v)
    self.store(k,v)
  end
end

Namun, hal ini tidak't mewarisi "sintaksis gula" diterapkan untuk sekop operator dalam konteks lain:

h << :key, "bar" #doesn't work
h.<< :key, "bar" #works
Mark Thomas
Mark Thomas
Jawaban edit 1 September 2015 в 1:27
76
0
 PericlesTheo
PericlesTheo
3 November 2013 в 6:18
2013-11-03T18:18:46+00:00
Lebih
Sumber
Sunting
#22701935

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")
25
0
Michael Durrant
Michael Durrant
3 November 2013 в 6:22
2013-11-03T18:22:40+00:00
Lebih
Sumber
Sunting
#22701936

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"} 
3
0
Caner &#199;akmak
Caner Çakmak
2 April 2014 в 8:57
2014-04-02T20:57:53+00:00
Lebih
Sumber
Sunting
#22701939

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
1
0
 kayleeFrye_onDeck
kayleeFrye_onDeck
13 April 2017 в 1:11
2017-04-13T01:11:47+00:00
Lebih
Sumber
Sunting
#22701940

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.

 Community
Community
Jawaban edit 23 Mei 2017 в 11:47
1
0
Related communities 1
Ruby Indonesia
Ruby Indonesia
1 769 pengguna
Ruby adalah bahasa pemrograman dinamis berbasis skrip yang berorientasi objek. Tujuan dari ruby adalah menggabungkan kelebihan dari semua bahasa-bahasa pemrograman skrip yang ada di dunia.
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 7 jam yang lalu
2
Akshit Mehta
Terdaftar 2 hari yang lalu
3
me you
Terdaftar 6 hari yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi