Как использовать «для» и изменять значения в хэше ruby? - PullRequest
0 голосов
/ 05 марта 2019

если есть хеш:

hash = {a:1, b: 2, c: 3}

пробовал это:

for value in hash.values do
    value = value * value
end

, но возвращает то же значение без желаемого значения, я нахожу решение:

hash.transform_values{ |value| value * value}
=> {:a=>1, :b=>4, :c=>9}

но хотите сделать с циклом for, как это сделать?

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

У нас есть богатая стандартная библиотека для работы с коллекциями в Ruby.Это очень полезно и охватывает самые необходимые случаи.У нас есть отличные методы Enumerable # map , Enumerable # filter , Enumerable # Reduction в ruby ​​и многие другие.Пожалуйста, прочитайте документацию.

Общий способ - сгенерировать новый хеш:

new_hash = hash.each_with_object({}) { |(k, v), acc| acc[k] = v * v }

Для Ruby начиная с версии 2.4.0 вы можете использовать метод Hash#transform_values:

hash.transform_values{ |value| value * value }

Мы предпочитаем использовать map, filter, transform_values вместо for по нескольким причинам.Например:

  • сведение к минимуму мутации данных и побочных эффектов;
  • способность связывать такие методы, как collection.filter(&:empty?).map(&:size)
0 голосов
/ 05 марта 2019
hash.each{ |k, v| hash[k] = v * v }
0 голосов
/ 05 марта 2019

Я думаю, что это ближе всего к тому, что вы хотите

for k, v in hash do
  hash[k] = v * v
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...