Ruby遍历哈希替换指定值为fills数组对应值的实现方法
简洁实现方案
codes和fills按索引一一对应,实现非常简单,两种常用写法都没有冗余逻辑:
方案1:构建哈希时直接替换(推荐,无多余遍历)
不需要先生成空哈希填充再二次修改,一步生成目标结果:
codes = ['AA', 'BB'] fills = ['FOUR', 'FIVE'] main_hash = {'AA' => ['1', 'TEXT', 'ONE'], 'BB' => ['2', 'TEXT', 'TWO'], 'CC' => ['3', 'TEXT', 'THREE']} hash = codes.zip(fills).to_h do |key, replace_val| arr = main_hash[key].dup arr[2] = replace_val # 2为待替换位置的索引,对应示例里的第三个元素 [key, arr] end
运行后得到的hash和预期结构完全一致。代码中dup的作用是避免修改main_hash内的原始数组,产生意外副作用,如果不需要保留main_hash原始值可以省略。
方案2:初始哈希生成后批量替换
如果你已经完成了初始哈希的填充,只需要按索引对齐遍历替换即可:
# 已完成初始hash填充的逻辑 hash = {} codes.each { |key| hash[key] = main_hash[key].dup } # 批量替换指定位置值 codes.each_with_index do |key, idx| hash[key][2] = fills[idx] end
两种写法时间复杂度均为O(n)(n为
codes数组长度),无性能差异,根据自身代码流程选择即可。
内容的提问来源于stack exchange,提问作者Ceesar
相关产品推荐
相关产品推荐

