2017-02-13 7 views
-2

У меня есть структура данных в Ruby, как показано ниже:Как суммировать значения из массива объектов

[["N1-Alb", 
    {'Sun, 05 Feb 2017'=>"", 
    'Mon, 06 Feb 2017'=>"", 
    'Tue, 07 Feb 2017'=>"", 
    'Wed, 08 Feb 2017'=>"0.25", 
    'Thu, 09 Feb 2017'=>"0.03", 
    'Fri, 10 Feb 2017'=>"", 
    'Sat, 11 Feb 2017'=>""}], 
["N1-Cet", 
    {'Sun, 05 Feb 2017'=>"", 
    'Mon, 06 Feb 2017'=>"7.8", 
    'Tue, 07 Feb 2017'=>"", 
    'Wed, 08 Feb 2017'=>"0.00", 
    'Thu, 09 Feb 2017'=>"", 
    'Fri, 10 Feb 2017'=>"", 
    'Sat, 11 Feb 2017'=>""}], 
["N3-Tju", 
    {'Sun, 05 Feb 2017'=>"", 
    'Mon, 06 Feb 2017'=>"", 
    'Tue, 07 Feb 2017'=>"", 
    'Wed, 08 Feb 2017'=>"3.15", 
    'Thu, 09 Feb 2017'=>"", 
    'Fri, 10 Feb 2017'=>"8.0", 
    'Sat, 11 Feb 2017'=>""}], 
["N7-Mlp", 
    {'Sun, 05 Feb 2017'=>"", 
    'Mon, 06 Feb 2017'=>"", 
    'Tue, 07 Feb 2017'=>"5.01", 
    'Wed, 08 Feb 2017'=>"0.03", 
    'Thu, 09 Feb 2017'=>"", 
    'Fri, 10 Feb 2017'=>"", 
    'Sat, 11 Feb 2017'=>"4"}]] 

Как я могу получить сумму для всех воскресений, понедельников и т.д. до субботы отдельно к Hash или формат массива?

Конечный хэш должен быть:

result = { 'sun': '0', 
      'mon': '7.8', 
      'tue': '5.01', 
      'wed': '3.43', 
      'thu': '0.03', 
      'fri': '8.0', 
      'sat': '4' } 
+0

'SyntaxError: (irb): 2: синтаксическая ошибка, неожиданное ',', expecting =>' –

+0

у вас есть образец кода, который вы написали, чтобы попытаться заставить это работать? как сообщество, нам нравится видеть, что вы проводили исследования и пытались самостоятельно реализовать решение и ударились о стену. – eiko

+0

@ sagarpandya82: Это потому, что 'Sun, 05 Feb 2017' является объектом Date. Вы можете поместить эти ключи в одинарные или двойные кавычки, ошибка не будет! –

ответ

1

Попробуйте это:

days = [:mon, :tue, :wed, :thu, :fri, :sat, :sun] 

result = your_hash.each_with_object({}) do |n, h| 
    n[1].each do |key, value| 
    h[days[key.cwday - 1]] = (h[days[key.cwday - 1]].to_f + value.to_f).to_s 
    end 
end 

Я обновил код, чтобы быть более кратким, по вашему запросу. Этот код использует тот факт, что nil.to_f == 0.0, который может расстроить некоторые желудки.

+0

Можем ли мы сделать это в краткой форме, используя 'each_with_object' и' index'? –

+0

@RajeshOmanakuttan Я обновил код, чтобы быть более кратким. мысли? – eiko

+0

Пожалуйста, не добавляйте в текст "обновленные" или "отредактированные" теги. Вместо этого включите изменение в текст, как если бы оно было первоначально, сохраняя все читабельность. Если нам нужно посмотреть, что изменилось или когда мы можем посмотреть историю изменений. –

Смежные вопросы