【问题标题】:For-Statement, Each 1000th Walkthrough, do somethingFor-Statement,每 1000 次演练,做一些事情
【发布时间】:2012-07-17 16:53:01
【问题描述】:

我正在通过 Forloop 100'000 次。 (这个数字可以多样化)

每 1000 次我想做一些特别的事情,而我在其他演练中没有做。

类似的东西:

for (int i = 0; i < 100000; i++)
{
    doTasks(); //Normal
    if(i == 1000 || i == 2000 || i == 3000 || i == 4000 ) //and so on...
    {
       doSomethingElse(); //Special, For every 1000th walkthrough
    }
}

完成这项任务最有效的方法是什么?

【问题讨论】:

  • 在 doTasks() 或 doSomethingElse() 中是否使用了“i”?
  • 不,答案已经回答了,忘记那个操作了,我在早期用C^^用过这个
  • 查看您的代码,您似乎正在使用 for 语句来延迟您必须执行的两个操作,因为 doTask() 和 doSomethingElse() 都没有将索引作为模式获取
  • 实际上,我正在使用 EntityFramework,我正在我的数据库中填充大量数据(例如 100000)。因为这会导致内存不足,所以我在每 1000 次演练中保存所有更改,然后创建一个新的上下文实例.. :)

标签: c# for-loop


【解决方案1】:

尝试使用模运算符。不确定 C# 语法,但类似:

if(i % 1000 == 0)
{
    //Do something
}

【讨论】:

    【解决方案2】:
    if (i != 0 && i % 1000 == 0)
    

    这意味着如果 i mod 1000 为 0(所以在 1000、2000、3000,...)但不是 i == 0

    【讨论】:

      【解决方案3】:
      if (i != 0 && i % 1000 == 0) {
        doSomethingElse();
      }
      

      % 是模运算符,返回除法运算的余数。如果余数为零,则您有 1000 的倍数。但是您需要特别排除 0,因为 0 也可以被 1000 整除。

      【讨论】:

        【解决方案4】:

        使用模运算符:

        if (i % 1000 == 0) {
         // do something...
        

        会做你想做的事。

        它除以给定的参数(在本例中为 1000)并给出余数。在这种情况下,您对 0 的余数感兴趣。请参阅模运算符 here 的文档@

        【讨论】:

          【解决方案5】:

          真的在这里吹毛求疵,并可能回答一匹死马,但是这样做:

          if(i%1000 == 999) ...
          

          而不是与 0 比较并避免第一次迭代。

          【讨论】:

            【解决方案6】:
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-06-18
            • 2018-11-12
            • 2015-10-20
            • 1970-01-01
            • 1970-01-01
            • 2019-04-01
            • 2014-05-23
            相关资源
            最近更新 更多