我有一个二维网格,其中所有图块都由两个坐标x和y定义。我将瓷砖存储在像var tiles = [];
这样的数组中。每个图块都是一个具有x
和y
属性的对象:
Tile = {
x: ...,
y: ...
}
出于绘图目的(画布),我想找出哪些瓷砖彼此相邻。我可以通过遍历每个元素并检查它是否相邻来做到这一点。由于这将需要n ^ n次访问,我不认为这是正确的方法。我认为会有更高效的算法。
我还认为以不同的方式存储数据会有所帮助,但同样,我不知道如何。
答案 0 :(得分:2)
您有两种创建网格的方法:
将相邻的瓷砖存放在其中:
var tile0 = {
x:0, y:1
}
var tile1 = {
x:1,y:1, tileLeft : tile0
}
如果您想要创建五角形或六角形...网格,那么它会非常有用。当然,使用for循环自动创建网格。
修改强>
二维数组只是一个数组数组
var arr = new Array()
for(var i = 0 ; i < 10 ; i++){
arr[i] = new Array()
}
现在您可以像在网格中一样设置值,例如:
arr[0][2] = {x:2,y:2} //It's a bit useless since indexes can be use for x and y
在这种情况下,我有10个数组存储在一个数组中,所以:
arr[10][0]
将返回以下错误:未捕获TypeError:无法设置属性&#39; 2&#39;未定义的,因为arr的索引仅定义在0到9之间。
答案 1 :(得分:0)
使用您的数据构造,我无法在不访问每个图块的情况下检查所有相邻图块的方法。
“久经考验的”二维网格数据结构将是......一个简单的二维数组。然后,您可以通过坐标直接访问切片。