我想知道如果有一種方法可以總結一下字符串表示多個時長像2 years 2 months
,10 months
,3 years
和輸出6 years
總結年份和月份持續時間的字符串表示紅寶石
1
A
回答
4
你可以做如下。
str = "2 years 4 months, 10 months, 3 years, 1 month"
r =/
(\d+) # match one or more digits in capture group 1
\s+ # match one or more whitespace chars
(year|month) # match 'year' or 'month' in capture group 2
s? # optionally match 's'
\b # match a word break
/x # free-spacing regex definition mode
a = str.scan r
#=> [["2", "year"], ["4", "month"], ["10", "month"], ["3", "year"], ["1", "month"]]
h = a.each_with_object(Hash.new(0)) { |(n,period),h| h[period] += n.to_i }
#=> {"year"=>5, "month"=>15}
y, m = h["month"].divmod(12)
#=> [1, 3]
h["year"] += y
#=> 6
h["month"] = m
#=> 3
h #=> {"year"=>6, "month"=>3}
注:
- 如在該文檔爲String#scan指出的那樣,「如果圖案包含基團,每個獨立的結果是本身含有每組一個條目的陣列。」
Hash.new(0)
爲零的默認值會創建一個空的哈希值,這意味着如果該散列h
沒有一個關鍵k
,h[k]
返回零。 Thos有時被稱爲計數散列。請參閱文檔Hash::new。- Numeric#divmod是一個有用的和大大-未充分利用的方法。
+0
功能要求:適用於單數月/年如'1年,1個月'。 –
+1
@ sagarpandya82,你的願望是我的命令。好建議。 –
+0
謝謝卡里。期待用我剩下的兩個願望。 –
相關問題
- 1. 紅寶石組按月份和年份
- 2. 選擇開始年份和開始月份之間的數據以結束年份和結束月份?
- 3. 將字符串轉換爲日期時間爲年份和月份SQL
- 4. 匹配日期,月份和年份字符串
- 5. Powershell提取年份和月份從字符串
- 6. Javascript相對時間 - 在年份和月份中顯示差異
- 7. 查找月份和年份內串
- 8. Django SelectDateWidget只顯示月份和年份
- 9. 按年份和月份
- 10. 只月份和年份
- 11. SQL:按月份和年份
- 12. excel如何顯示當前的月份和年份與空間
- 13. 將紅寶石轉換爲月份和日期?
- 14. 獲取特定月份和年份的開始和結束時間戳php
- 15. 關於日期 - 時間差異的月份和年份
- 16. 具有月份和年份的時間功能Android
- 17. 從日期,月份和年份開始的Python時間戳
- 18. 從日期時間視場中的年份和月份條目
- 19. PHP生成與年份和月份顯示的數字陣列
- 20. WPF用戶控件從一個總月數值中顯示年份和月份
- 21. 從月到年和月份
- 22. Perl DateTime持續時間格式不顯示年份
- 23. 如何從過去的月份到當月的月份和年份列表
- 24. 的SQL Server DATEPART的年份和月份
- 25. 從時間戳中提取年份和月份(6)
- 26. 如何與日期時間一起創造月份和年份
- 27. 轉換日期時間爲nvarchar,只是年份和月份
- 28. MYSQL從年份和月份生成時間戳
- 29. 時間戳記日期,月份和年份jquery
- 30. 創建月份和年份列,以加快時間戳查詢
感謝greenie,但考慮將其刪除並作出選擇之前等待一段時間(至少一兩個小時,說了)。快速選擇會阻礙其他答案,並可能使正在解答問題的其他人短路。 –