You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中如何用单个整数匹配哈希范围键并获取对应值

如何匹配整数对应的范围键哈希值

你可以利用Ruby的Enumerable#bsearch方法来实现,它是二分查找,比线性遍历(each/map)效率更高,而且属于内置方法,符合你的需求:

hash = {
   0..25  => { low_battery_count:     13 }, 
  26..75  => { average_battery_count:  4 }, 
  76..100 => { good_battery_count:     4 }
}

def battery_info(hash, num)
  # 二分查找找到包含num的范围键
  matching_range = hash.keys.bsearch { |range| range.include?(num) }
  hash[matching_range]
end

# 测试示例
battery_info(hash, 3)  # => {:low_battery_count=>13}
battery_info(hash, 35) # => {:average_battery_count=>4}
battery_info(hash, 90) # => {:good_battery_count=>4}

为什么用bsearch?

因为你的哈希键是有序且不重叠的连续范围,二分查找的时间复杂度是O(log n),远优于线性遍历的O(n),尤其是当范围数量增多时,优势会更明显。

静态场景的简化写法

如果你的范围是固定不变的,也可以用case语句直接匹配,代码更直观:

def battery_info(num)
  case num
  when 0..25  then { low_battery_count: 13 }
  when 26..75 then { average_battery_count: 4 }
  when 76..100 then { good_battery_count: 4 }
  end
end

但如果哈希是动态生成的(比如范围或对应值会变化),还是基于哈希的bsearch方法更灵活。

内容的提问来源于stack exchange,提问作者Mohsin Nazakat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:03:32