0

这是一个通用的编程问题。

我在很多帖子中看到通过双 for 循环遍历二维数组是“可怕的”“丑陋的”等等......这是为什么?

与字典等相比,数组不是一种有效的数据结构吗?双 for 循环也不是比 foreach 或其他替代方法更有效吗?此外,如果您使用 2d 数组,您通常会处理 2d 坐标系。x 和 y 位置已经作为数组的索引“内置”到数据结构中(因此您不需要添加,例如,作为字典键的元组)并且通过更改 for 循环参数,您可以非常便宜地进行迭代通过网格的不同部分,同时完全忽略您不想迭代的部分。例如,为了避免你可以做的“外部”行和列..

for (int x = 1; x < Grid.GetLength(0)-1; x++)
{
        for (int y = 1; y < Grid.GetLength(1)-1; y++)
        {
            Grid[x,y].DoSomething();
        }
}

使用 foreach 您将遍历集合中的所有内容,然后检查它是否在您想要的坐标范围内。

4

1 回答 1

1

迭代 2D 数组的 2 个循环没有错,只要这是您真正需要做的。需要注意的一件事是性能 - 通常,循环应该遵循内存中数组的布局。例如,如果 2D 数组存储为 1D 内存缓冲区,其中行n存储在行之后n-1(这是通用语言中的常见实现),则外部循环应该通过行,内部循环应该通过列。这样缓存未命中被最小化。

一般来说,与其他方法相比,数组访问的有效性完全取决于特定的语言实现。通常,数组将是最原始的数据结构,从而实现最快的访问。顺便说一句,字典是数组概念的概括。

于 2013-02-08T22:40:27.313 回答