Ruby中的模数操作数

时间:2013-03-19 15:54:34

标签: ruby-on-rails ruby

我有一些代码每10,000次迭代执行一次。 我正在使用模数if i % 10000 == 0然后做一些事情。你在代码中看到了下面的“东西”(pg_conn.exec function),但无论如何我的问题是,pg_conn.exec需要在最后剩余的迭代中完成,实际上可能无法由10,000平均设计。我怎样才能做到这一点?我的程序执行pg_conn.exec函数5次,因此变量i等于50000.该程序总共需要56,000次迭代。我如何处理剩余的6,000次迭代?

conn.query("select * from my_tbl") do |r|
    sql += "('#{r[:main_id]}', '#{r[:rep_dt]}', '#{r[:create_dt]}')"

    if i % 10000 == 0
    pg_conn.exec(sql + ';') # important statement that executes only every 10000
    end
end

2 个答案:

答案 0 :(得分:1)

只需在块外再次调用代码即可。记得在if块中重置你的sql字符串:)

更新:添加了一个检查,以便只有在sql中发生更改时才会执行对pg_conn.exec的最后一次调用。

base_sql_statement = ... # base sql statement here
sql = base_sql_statement

conn.query("select * from my_tbl") do |r|
  sql += "('#{r[:main_id]}', '#{r[:rep_dt]}', '#{r[:create_dt]}')"

  if i % 10000 == 0
    pg_conn.exec(sql + ';') # important statement that executes only every 10000
    sql = base_sql_statement
  end
end

if sql != base_sql_statement
  pg_conn.exec(sql + ';')
end

答案 1 :(得分:0)

您的代码块中不清楚i来自何处,但您需要知道i的最大值是什么才能识别您是否是在其余组中与否。假设您可以使用max_i,请将当前if替换为if i % 10000 == 0 || i > ((max_i / 10000) * 10000)以利用整数运算。