Добавить пару ключ/значение в хэш с

В Ruby, можно добавить значения для существующих массивов с использованием <<:

a = []
a << "foo"

но, можно также добавлять пары ключ/значение к существующему хэш?

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

Я знаю, что вы можете сделать:

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

но, что's не хочу.

Спасибо.

Комментарии к вопросу (2)

Поскольку хэши не'т быть упорядочены, нет'т понятие присоединения. В Ruby хэши с 1.9 поддерживать порядок вставки, однако. Вот несколько способов для добавления новой пары ключ/значение.

Самое простое решение

h[:key] = "bar"

Если вы хотите способ, использовать "магазин":

h.store(:key, "bar")

Если вы действительно, действительно хотите использовать на "совок" и оператор (<<), на самом деле добавляя к значению хэш в массив, и вы должны указать ключ:


h[:key] 
Комментарии (3)

Нет, я не'т думаю, что вы можете добавлять пары ключ/значение. Единственное, что ближе что я знаю о том, используя магазин метод:

h = {}
h.store("key", "value")
Комментарии (0)

Возможно, вы хотите хэш#слияние ?

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

Если вы хотите изменить массив в месте слияния!`

1.9.3p194 :016 > h.merge!(:key => 'bar')
 => {:key=>"bar"} 
Комментарии (3)

Мне приходилось делать подобное, но мне нужно, чтобы добавить значения с одинаковыми ключами. Когда я использую слияния или обновления я могу't нажмите значения с одинаковыми ключами. Поэтому мне пришлось использовать массив хэшей.

    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
Комментарии (0)

Подобно тому, как они не сливаются!имагазинлечить _existing_ хэши по-разному в зависимости от параметров, и, следовательно, повлияет на ваши предпочтения. Кроме того, что с точки зрения синтаксиса, сливаться друг с другом!'s ключ: "в значении" в синтаксис соответствует против JavaScript и Python. Я'ключ-значение ве всегда ненавидел запятая-разделение пар, лично.

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

{:ключ=> наша"ценности" и}

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

{:ключ=>"в значении" и, "по ключ" в=> наша"ценности" и}

Чтобы получить машинист экскаватора << работает, я бы посоветовал использовать Марк Томас'ы ответ.

Комментарии (0)