我需要在Ruby中按年齡分組人員。我有他們的出生日期,以及一種年復一年的方法。所以像這樣的解決方案工作。詢問散列的紅寶石數組
case
when (0..15).cover?(age_years)
'child'
when (16..24).cover?(age_years)
'16 to 24'
when (25..34).cover?(age_years)
'25 to 34'
when (35..44).cover?(age_years)
'35 to 44'
when (45..54).cover?(age_years)
'45 to 54'
when (55..64).cover?(age_years)
'55 to 64'
when age_years > 64
'really old'
else
'unknown'
end
但是,我正在嘗試學習Ruby,並且正在尋找更優雅的解決方案。我想過把age_ranges成這樣散列數組...
age_ranges = [{ name: 'child', min_age: 0, max_age: 15 },
{ name: '16 to 24', min_age: 16, max_age: 24 }]
,但我在一個不知如何詢問這個數據返回正確的名稱,其中的age_years是適當的範圍內,或甚至一系列這樣
age_ranges = [{ name: 'child', age_range: '0..15' },
{ name: '16 to 24', age_range: '16..24' }]
看起來整潔,但我有,如果我寫的胡言亂語,因爲我不知道該如何年齡匹配年時提取的名字都不知道。
有人能指出我正確的方向嗎?
'age_ranges.each_with_object('unknown'){| a,_ |如果[:age_range] === age}'處理「未知」情況,則破壞[:name],而您的代碼不會。 – mudasobwa
一般來說,'find' /'detect'不適用於'case'的代理,除非你有明確的||。 ELSE_VARIANT'。 – mudasobwa
@mudasobwa實際上在看了你的代碼之後,決定添加一個關於傳遞給方法的超出範圍年齡的註釋。稍後會編輯,謝謝 –