我有類Call
- 它表示單個電話呼叫具有一定的分鐘數/秒數,通話日期等。我想總結給定日期的呼叫長度。 問題是我的數據是字符串格式,我使用各種Time.parse
選項和許多不同的東西來格式化它。 但我的主要問題是,如何總結它們?我需要像Ruby的inject
/reduce
,但足夠聰明,知道60秒是一分鐘。 另一個問題是我正在從.CSV文件中讀取數據,將每一行都變成散列,並使Call對象不在其中。 任何提示? :)紅寶石 - 如何添加phonecall的長度? CSV文件
0
A
回答
1
我建議將呼叫的持續時間存儲爲整數中的秒數。因爲這可以讓你輕鬆地在數據庫中運行計算。
但是,如果你喜歡,讓你可能需要使用像這樣的字符串表示:
# assuming `calls` is an array of call instances and the
# duration of the call is stores an attribute `duration`
total = calls.sum do |call|
minutes, seconds = call.duration.split(':')
minutes * 60 + seconds
end
# format output
"#{total/60}:#{total % 60}"
請注意:sum
方法的ActiveSupport的一部分。當你使用沒有Rails的純Ruby時,你需要用這個代替:
total = calls.inject(0) do |sum, call|
minutes, seconds = call.duration.split(':')
sum + minutes * 60 + seconds
end
0
你可能可以map
他們都通過Float
通過Time.parse
,然後inject
映射的浮點數組表示012秒。
+0
但它知道將60秒轉換爲一分鐘嗎? – Jes
+0
因爲你會寫一段代碼將分鐘數乘以60? –
相關問題
- 1. 紅寶石:如何從加載文件
- 2. 如何添加(預/後)_install_hook紅寶石
- 3. JSON到CSV文件紅寶石
- 4. 紅寶石蒙戈的寶石,其中數組長度大於
- 5. 如何紅寶石
- 6. 添加現時紅寶石
- 7. 紅寶石文本
- 8. 如何添加一個產品變型與紅寶石寶石
- 9. 紅寶石長度不顯示數組的正確長度
- 10. 紅寶石寶石文檔
- 11. 紅寶石:CSV到YAML
- 12. 紅寶石寶石知名度
- 13. 紅寶石文件更名
- 14. 紅寶石「郵件」寶石文檔
- 15. 紅寶石 - 如何加密文本
- 16. 紅寶石最長的迴文
- 17. 紅寶石如何找到寶石?
- 18. 紅寶石:我如何處理與「壞逗號」 CSV文件?
- 19. 紅寶石文件路徑
- 20. 如何交織不同長度的陣列,紅寶石
- 21. 紅寶石CSV讀第一行csv文件
- 22. Python /紅寶石:cronjob將不會加載紅寶石寶石?
- 23. 如何紅寶石
- 24. 如何打開紅寶石文件
- 25. 紅寶石 - 讀numerated文件
- 26. Rails寶石添加文件
- 27. 紅寶石文件需要
- 28. 紅寶石截斷字+長文本
- 29. 紅寶石文件編碼
- 30. 如何紅寶石
你是否考慮在數據庫中存儲秒數作爲整數?所以不是存儲''1:43''store'103'。這使得用這些值計算(總和或平均)變得更容易。 – spickermann
是的,我將其推廣爲「如果可以對數值進行數學運算,總是將它們存儲爲數字,如果數學不可能,則將它們存儲爲字符串或其他適當類型」這使得通話持續時間成爲一個數字,房子街道號碼一個字符串。是的,它首先看起來像一個數字(甚至名字是「數字」),但a)你不能做數學和b)這個結構將打破第二個你必須存儲地址,如「貝克街221b 「 –
@SergioTulentsev:我喜歡你的經驗法則。我想添加建議,以[SI單位](https://en.wikipedia.org/wiki/International_System_of_Units)將這些值標準化。 – spickermann