Мой Внутренний Хэш заменяет существующее значение, когда я назначаю новое значение - PullRequest
0 голосов
/ 19 октября 2018

Я сохраняю результат в хеш-коде, как этот

Я присвоил результат в таком виде

Result['UserCreation']={"Test1"=>"Rajagopalan"}

Итак, он создал хеш-код как этот

{"UserCreation"=>{"Test1"=>"Rajagopalan"}}

Теперь я не знаю, как назначить другой результат для Test2.Когда я склонен присваивать результат, подобный этому

Result['UserCreation']={"Test2"=>"Kali"}

Он заменяет существующий результат, и он правильно выполняет свою работу, но я хочу создать хеш результата, как показано ниже, когда я присваиваю Результат теста2

{"UserCreation"=>{"Test1"=>"Rajagopalan","Test2"=>"Kali"}}

Как мне этого добиться?

Допустим, в этом порядке я получаю параметры

'UserCreation',{"Test1"=>"Rajagopalan"},
'UserCreation',{"Test2"=>"Kali"}
'contactcreate',{"Test2"=>"Kali"}

Результат

{"UserCreation"=>{"Test1"=>"Rajagopalan","Test2"=>"Kali"},'contactcreate'=>{"Test2"=>"Kali"}}

Все эти значения являются параметрами для функций.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Может быть, вы хотите использовать Hash # store :

result = {}
result['UserCreation'] = {"Test1"=>"Rajagopalan"}

result['UserCreation'].store("Test2", "Kali")
result #=> {"UserCreation"=>{"Test1"=>"Rajagopalan", "Test2"=>"Kali"}}
0 голосов
/ 19 октября 2018

Вы должны использовать Hash#merge! метод:

Result['UserCreation'].merge!({"Test2"=>"Kali"})

Вот краткое объяснение:

Когда вы используете назначение (Result['UserCreation']={"Test2"=>"Kali"}) вы полностью заменяете значение для конкретного хеш-ключа.Если вы хотите добавить (объединить) что-то в существующий хеш, вы должны использовать метод merge!.

Обратите внимание, что вы можете использовать метод Hash#merge!, потому что вы знаете, что значение Result['UserCreation'] само является хешем.

Также обратите внимание, что есть метод merge без взрыва (!).Разница в том, что bang-версия будет мутировать (изменять) ваш объект.Подумайте об этом:

hash = {}
hash.merge({'one' => 1})

# hash variable will hold its initial value
# because `merge` method will not change it.
p hash # => {}

hash.merge!('one' => 1)
# This time we use bang-version, so hash variable
# will be updated.
p hash # => {"one"=>1}

Еще одна вещь о Ruby, обратите внимание, как в версии bang мы опускаем фигурные скобки.Это можно сделать, если последний аргумент , передаваемый методу, является хешем.

Кроме того, по соглашению в Ruby snake-case использует переменную иназвание метода, то есть

result = {}
result['user_creation'] = {'test_1' => 'Rajagopalan'}
result['user_creation'].merge!('test_2' => 'Kali')

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

result = {'user_creation' => {}}
result['user_creation'].merge!('test_1' => 'Rajagopalan')
result['user_creation'].merge!('test_2' => 'Kali')

или обновить событие несколькими парами:

result = {'user_creation' => {}}
result['user_creation'].merge!(
  'test_1' => 'Rajagopalan',
  'test_2' => 'Kali'
)

ОБНОВЛЕНИЕ

ДляВ вашем случае, если вы получите эти параметры:

'UserCreation',{"Test1"=>"Rajagopalan"},
'UserCreation',{"Test2"=>"Kali"}
'contactcreate',{"Test2"=>"Kali"}

предположим, что первый параметр с именем kind и последний с именем value:

# kind = 'UserCreation' and value = '{"Test1"=>"Rajagopalan"}'.
result = {}
# Here we check `result[kind]` if there's no key, a new hash will
# be assigned, otherwise the existing value will be used.
result[kind] ||= {}
result[kind].merge!(value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...