у меня есть:
event = {"first_type_a" => 100, "first_type_b" => false, "second_type_a" => "abc", "second_type_b" => false}
Я пытаюсь изменить ключи event
на основе оригинала. Если имя содержит подстроку, имя будет изменено, и новый ключ, значение пары должно быть добавлено, а старая пара должна быть удалена. Я ожидаю получить:
event = {"important.a_1" => 100, "important.b_1" => false, "second_type_a" => "abc", "second_type_b" => false}
Какой самый эффективный способ обновить event
?
Я ожидал, что это сработает:
event.each_pair { |k, v|
if !!(/first_type_*/ =~ k) do
key = "#{["important", k.split("_", 3)[2]].join(".")}";
event.merge!(key: v);
event.delete(k)
end
}
но возникает ошибка:
simpleLoop.rb:5: syntax error, unexpected keyword_do, expecting keyword_then or ';' or '\n'
... if !!(/first_type_*/ =~ k) do
... ^~
simpleLoop.rb:9: syntax error, unexpected keyword_end, expecting '}'
end
^~~
simpleLoop.rb:21: embedded document meets end of file
Я подумал подойти к нему по-другому:
if result = event.keys.find { |k| k.include? "first_type_" } [
key = "#{["important", k.split("_", 3)[2]].join(".")}"
event.merge!(key: v)
event.delete(k)
]
но все равно не повезло. Я считаю все скобки, и, как показывает ошибка, это что-то есть, но я не могу найти это. Имеет ли значение заказ?