我需要在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实际上在看了你的代码之后,决定添加一个关于传递给方法的超出范围年龄的注释。稍后会编辑,谢谢 –