【问题标题】:Improving loop efficiency/extensibility提高循环效率/可扩展性
【发布时间】:2010-10-13 14:56:06
【问题描述】:

我有一个组成二维网格的像素数组,我想随着时间的推移左右移动这些像素......但是我想出的循环效率相当低,并且在术语方面不允许进行太多扩展的改变运动。任何关于如何改进我已经拥有的东西的想法都将不胜感激。

while (true)
{
  for (float i = 0; i < x; i++)
  {
    foreach (Pixel p in pixels)
    {
      p.move(10, 0);
    }
  }
  for (float i = 0; i < x * 2; i++)
  {
    foreach (Pixel p in pixels)
    {
      p.move(-10, 0);
    }
  }
  for (float i = 0; i < x; i++)
  {
    foreach (Pixel p in pixels)
    {
      p.move(10, 0);
    }
  }
}

编辑:抱歉代码中有错误,中间循环需要为 -10 第一个 for 循环将所有像素向右移动,第二个将它们移回原点然后向左移动,第三个循环然后将它们移动回到原点。

【问题讨论】:

  • 你不应该使用浮点数。
  • 无限循环是你的第一个问题...
  • 目前只是为了简单起见,因为 x 是一个浮点数,并且将被更改。
  • 移动需要在执行期间发生,因此很可能会在单独的线程中运行。
  • 我知道移动窗口是什么意思。移动一个像素是什么意思?不管它意味着什么,这就是你的周期,而不是循环。

标签: c# loops performance extensibility


【解决方案1】:

您可以在实际使用像素的代码中使用偏移变量。然后通过更改偏移量来移动像素,这是一行代码。

【讨论】:

    【解决方案2】:

    你不能只使用一个循环并使用 int 吗?三个循环似乎是多余的

    使用从0到x*2的一个循环并在x值上执行移动选择

    类似

    for(int i = 0; i < x * 2; i++)
    {
        foreach(Pixel p in pixels)
        {
            if (i < x)
            {
                p.move(0.1, 0);
                p.move(10, 0);
                p.move(10, 0);
            }
            else
                p.move(10,0)
         }       
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 2015-10-08
      • 2019-11-06
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2019-10-11
      • 1970-01-01
      相关资源
      最近更新 更多