хэше, if key.in?([:specific_keys])
не охота пересобирать новый хэш
h = {foo: 0, bar: 1, baz: 2} h.merge!({ bar: 0, baz: 0 }) h # => {:foo=>0, :bar=>0, :baz=>0}
не, не совсем то, надо если ключ == baz hash[baz] = hash[baz].something
h = {foo: 0, bar: 1, baz: 2} %i[bar baz] .map { |k| [k, h[k].to_s] } # вместо .something я исп. to_s .to_h .then { |with_data| h.update(with_data) }) # => {:foo=>0, :bar=>"1", :baz=>"2"} h # => {:foo=>0, :bar=>"1", :baz=>"2"}
Если значениями в хэше являются mutable объекты, а .something - метод-мутатор, то можно так: h = { foo: 'a', bar: 'b', baz: 'c' } h.values_at(:bar, :baz).each(&:upcase!) h # => {:foo=>"a", :bar=>"B", :baz=>"C"}
Пожалуй можно обойтись tap вместо then, ведь пробрасываемый хэш не изменяется
hash.each_pair { |key, value| hash[key] = value.succ if wanted. include?(key) } яб так
wanted.each { |wanted_key| hash[wanted_key] = hash[wanted_key].succ }
Ну плохо работают надо минусить до плюсов на ответы на невнятные вопросы)
@mechnicov скажи норм?
Вот это уже покрасивее. Спс
Обсуждают сегодня