gpt4 book ai didi

c# - 具有四个无限方向的二维数组

转载 作者:行者123 更新时间:2023-11-30 20:15:54 24 4
gpt4 key购买 nike

我想创建一个 2D map 。示例:

Cell[,] cells;

for(int x = 0; x < columns; x++)
{
for(int y = 0; y < rows; y++)
{
cells[x, y] = new Cell();
}
}

第一个单元格位于 (0|0)。如果我想以这个单元格为中心并在左侧和顶部创建新单元格怎么办?这些单元格将具有负索引。

解决此问题的一种方法是确定一个方向的最大长度的值。每边有 100 个图 block 的 map 会将 map 的中心放置在 (50|50)。

假设没有硬件限制并且没有每边的最大长度,创建具有 (0|0) 中心的 2D map 的最佳方法是什么?我想不出比通过二维数组中的 x 和 y 坐标访问单元格更好的方法了。

最佳答案

嗯,数组是逻辑结构,而不是物理结构。
这意味着我们将 0,0 视为 左上角 的方式可能有助于可视化二维数组的内容(事实上,二维数组在某种程度上也有助于可视化),一点也不准确——0,0“单元格”不是角,索引也不是坐标,尽管它确实有助于当你像他们一样思考他们时,理解他们。

也就是说,没有什么能阻止您创建自己的类,它实现了一个既可以取正值也可以取负值的索引器 - 事实上,根据 Indexers (C# Programming Guide) -

Indexers do not have to be indexed by an integer value; it is up to you how to define the specific look-up mechanism.

由于您甚至没有义务使用整数,因此您当然可以同时使用正值和负值作为索引器。

我正在测试使用列表列表进行存储并根据类索引器动态计算存储索引的想法,但是这里已经太晚了,我想我太累了无法正确完成。这有点像另一个答案的解决方案,但我试图在不让您在构造函数中设置最终大小的情况下执行此操作。

关于c# - 具有四个无限方向的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51921242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com