положить значения хэшей в другой хэш - PullRequest
0 голосов
/ 24 октября 2019

Хорошо, я задаю 2 вопроса и помещаю ввод каждого пользователя в отдельные хеши. Я использую цикл, чтобы повторить это несколько раз, а затем добавив все хеши в массив. У меня вопрос / где я застрял, как я могу назначить сумму значений каждого хеша, отдельный отдельный хеш.

Вот мой код:

arr:[]
         (1..n).each do |i|

 hash=Hash.new()

 puts "Please input a value for day # #{i}" 
 hash["day1"]=gets.chomp.to_f

 puts "Please input a value for day # #{i}" 
 hash["day2"]=gets.chomp.to_f

 arr << hash

  end 

Я думал об этом, поскольку я использовал этот метод для сбора входных данных пользователей и помещения их в хеш, но он не работает: /

   hash[:total]= hash.each_value.inject(:+) 

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

1 Ответ

0 голосов
/ 24 октября 2019

Вы можете попробовать Hash#reduce метод с Hash#merge

arr = []
3.times do |i|
  hash = Hash.new()
  puts "Please input a value for day # #{i}"
  hash["day1"] = gets.chomp.to_f
  puts "Please input a value for day # #{i}"
  hash["day2"] = gets.chomp.to_f
  arr << hash
end

totals = arr.reduce({}) do |sums, day|
  sums.merge(day) { |_, a, b| a + b }
end

puts totals
# {"day1"=>8.0, "day2"=>11.0}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...