Ruby中如何基于预设数值区间简洁判断数字所属分类
实现方案
Ruby 中最简洁、可读性最高的写法是直接用 case 语句做范围匹配,完全贴合定义的区间规则:
def get_value_level(num) case num when ...10 then 'very_low' # 匹配 <10 when 11..20 then 'low' # 匹配11-20 when 21..30 then 'medium' # 匹配21-30 when 31..40 then 'high' # 匹配31-40 when 41.. then 'very_high' # 匹配 >=41 end end # 示例调用 get_value_level(23) # 返回 => "medium"
补充说明
- 写法里的
...10是 Ruby 原生语法中不包含终点的范围,正好对应规则里的<10;41..是 Ruby 2.6 及以上版本支持的无终点开范围,对应规则里的41+。 - 如果需要兼容 Ruby 2.6 以下的老版本,把最后一个分支的
41..替换为41..Float::INFINITY即可。 - 原始规则没有覆盖数字10的分类,如果实际业务需要把10归到
very_low分类,把第一个分支的...10改成..10(两个点,包含终点10)就行。
如果追求极致短代码,也可以用哈希+查找的写法,但可读性远不如case语句,不推荐在业务代码中使用:
levels = {...10 => 'very_low', 11..20 => 'low', 21..30 => 'medium', 31..40 => 'high', 41.. => 'very_high'} levels.find { _1 === 23 }[1] # => "medium"
内容的提问来源于stack exchange,提问作者Neil Middleton
相关产品推荐
相关产品推荐

