ruby开发之hash遍历each_with_index

需要给一个固定的数据结构中插入一个固定的数组数据

由于ruby具有hash遍历

搜了一下api

hash = Hash.new
%w(cat dog wombat).each_with_index {|item, index|
  hash[item] = index
}
hash   #=> {"cat"=>0, "dog"=>1, "wombat"=>2}
但是这样之后就报错了

  • inserting into Hash while enumerating it raises an exception
1
2
3
foo = { :a => :b }
foo.each { |h| foo[:c] = :d }
  # => RuntimeError: can't add a new key into hash during iteration
新建一个hash去接收后来发现item是(key,value)在一起组成了新的key

于是试一下把key,value单独分开,居然没报错,成功了,代码如下:

#设置奖励信息                                                                             def set_award_info(task_params,award_params)
          if task_params[:goods_id].to_i == Sequel::Model::TABLE
            # 更新sys_task_award_account
            award_params[:account].split(/;/).each do |params|
              task_award = {}
              task_award[:account_id] = nil
              task_award[:award_type] = nil
              task_award[:base_amount] = nil
              task_award[:min_amount] = nil
              task_award[:max_amount] = nil
              task_award[:award_equation] = nil

              params = params.split(/:/)
              task_award.each_with_index do |(key,value),index|
                task_award[key] = params[index]
              end
              task_award[:task_id] = task_params[:task_id]
              task_award[:create_time] = Time.now
              task_award[:update_time] = Time.now
              sys_task_award_account = CaiQiuService::CoreDao::SysTaskAwardAccount.new
              sys_task_award_account.save_hash(task_award)
            end

          end
          #其他类型 TODO
        end


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左钦杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值