2017-02-06 1 views
1

나는 duration 속성 (Ruby 2.2.4 Time 데이터 타입)을 가진 CardioExercise 모델을 가지고있다. 지난 한 주 동안 회원이 에어로빅 활동의 총 지속 시간을 계산하는 방법을 작성해야합니다. 여기 Ruby : Time 객체의 배열을 합하는 방법은 무엇입니까?

내가 지금까지있어 무엇 : '

=> [2000-01-01 00:25:00 UTC, 2000-01-01 00:30:00 UTC, 2000-01-01 00:53:20 UTC] 

사람들은 내가 기대하고있어 시간 개체입니다,하지만 난 할 수 있습니다 레일 콘솔에서

def minutes_cardio_exercise_last_week 
    array = @user.member.cardio_exercises.between_times(1.week.ago.beginning_of_week,   1.week.ago.end_of_week).map { |d| d[:duration] } 
    hour, min, sec = ?? 
    (hour * 60 + min + sec/60).round 
end 

, 배열 포함 지난 주 에어로빅 활동의 108 분 같은 것을 얻기 위해 값을 합산하는 방법을 알아 냈습니까?

내 연구 중에 PHP를 사용하여이 문제를 해결하는 두 개의 게시물을 발견했습니다. 세 번째 게시물은 Ruby이지만 내 용도로 솔루션을 적용하는 방법을 알 수는 없습니다.
How to Sum Time Value in Array | How to sum time in array? | Ruby: Average array of times

감사의 인사와 통찰력에 감사드립니다.

+0

시간은 기간을 나타내는 데 사용하기에 적합한 클래스가 아닙니다. 정수 값을 사용하여 많은 문제를 해결할 수 있습니다. –

답변

2
array.inject(0) { |sum, t| sum + ((t.hour * 60 + t.min + t.sec/60).round) } 

또는 분이 걸리는 기능이 있으면 더 좋습니다.

def minutes(t) 
    (t.hour * 60 + t.min + t.sec/60).round 
end 

def minutes_cardio_exercise_last_week 
    array = @user.member.cardio_exercises.between_times(1.week.ago.beginning_of_week,   1.week.ago.end_of_week).map { |d| d[:duration] } 
    array.inject(0) { |sum, t| sum + minutes(t) } 
end 
+0

감사합니다. @Manikandan. 그 트릭을 했어! 나는 inject 방법을 연구했지만, 그것을 사용하는 방법을 알아 내지 못했습니다. 더 나은 이해를 얻으려면 해당 방법에 대한 문서를 읽으십시오. – codeinspired

관련 문제