整数映射至组成数:基于给定处理量构建哈希映射的技术需求
构建处理次数哈希表的Ruby实现方案
我来帮你搞定这个哈希表构建的问题,结合你给出的代码片段,我整理了完整的实现方案和逻辑解释:
问题背景
我们有一个代表各实体需处理次数的数组:
array = [20, 30, 10, 7, 8, 5]
以及实际总处理次数:
amount_processed = 80
需要构建一个哈希表,以数组元素为键,对应值为该元素在80次总处理中成功完成的次数(核心逻辑是按数组顺序分配处理次数,直到总次数耗尽)。
完整代码实现
array = [20, 30, 10, 7, 8, 5] amount_processed = 80 hash = {} index = 0 until amount_processed <= 0 || index == array.count current_item = array[index] # 取当前实体需求次数与剩余总处理次数的最小值,避免超量分配 mapped_amount = [current_item, amount_processed].min hash[current_item] = mapped_amount # 更新剩余待处理次数 amount_processed -= mapped_amount # 移动到下一个实体 index += 1 end # 输出结果 puts hash.inspect # 本例输出:{20=>20, 30=>30, 10=>10, 7=>7, 8=>8, 5=>5}
代码逻辑解释
- 初始化:创建空哈希表
hash存储结果,index用于遍历数组元素 - 循环终止条件:
until循环会在两种情况下停止:总处理次数已耗尽(amount_processed <= 0),或者已经遍历完所有数组实体(index == array.count) - 分配处理次数:每次循环取当前数组元素,计算可分配的次数——取该实体的需求次数和剩余总次数的最小值,这样既不会超过该实体的需求上限,也不会超出总处理次数
- 更新状态:将分配好的次数存入哈希表,减去已使用的处理次数,然后移动索引到下一个实体
特殊情况处理
如果总处理次数不等于数组元素总和,比如amount_processed = 70,代码会自动停止在总次数耗尽时,最终哈希表结果为:
{20=>20, 30=>30, 10=>10, 7=>7, 8=>3}
此时20+30+10+7+3=70,总处理次数刚好耗尽,后续的5不会被分配到次数。
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

