Javascript 在二维网格中查找相邻的瓷砖

Javascript 在二维网格中查找相邻的瓷砖,javascript,performance,grid-layout,Javascript,Performance,Grid Layout,我有一个二维网格,其中所有瓷砖都由两个坐标x和y定义。我正在这样的数组中存储tilesvar tiles=[]。每个磁贴都是一个具有x和y属性的对象: Tile = { x: ..., y: ... } 出于绘图目的(画布),我想找出哪些瓷砖彼此相邻。我可以通过循环遍历每个元素来检查它是否相邻。因为这需要n^n次访问,所以我认为这不是正确的方法。我认为会有一个更有效的算法 我还认为以不同的方式存储数据可能会有所帮助,但我也不知道该怎么做。对于您的数据构造,我无法找到一种方法来检查所

我有一个二维网格,其中所有瓷砖都由两个坐标x和y定义。我正在这样的数组中存储tiles
var tiles=[]。每个磁贴都是一个具有
x
y
属性的对象:

Tile = {
   x: ...,
   y: ...
}
出于绘图目的(画布),我想找出哪些瓷砖彼此相邻。我可以通过循环遍历每个元素来检查它是否相邻。因为这需要n^n次访问,所以我认为这不是正确的方法。我认为会有一个更有效的算法


我还认为以不同的方式存储数据可能会有所帮助,但我也不知道该怎么做。

对于您的数据构造,我无法找到一种方法来检查所有相邻的磁贴,而不访问每个磁贴


“久经考验的”二维网格数据结构将是……一个简单的二维数组。然后,您可以通过它们的坐标直接访问磁贴。

使用数据构造,我看不到一种方法可以在不访问每个磁贴的情况下检查所有相邻的磁贴


“久经考验的”二维网格数据结构将是……一个简单的二维数组。然后,您可以通过其坐标直接访问磁贴。

创建网格有两种方法:

  • 使用二维数组,这对于网格来说肯定更容易
  • 将相邻的瓷砖存储在其中,如下所示:

    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()
}
在这种情况下,我将10个数组存储在一个数组中,因此:

arr[10][0] 

将返回以下错误:未捕获类型错误:无法设置未定义的属性“2”,因为arr的索引仅定义在0和9之间。

创建网格有两种方法:

  • 使用二维数组,这对于网格来说肯定更容易
  • 将相邻的瓷砖存储在其中,如下所示:

    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()
}
在这种情况下,我将10个数组存储在一个数组中,因此:

arr[10][0] 

将返回以下错误:Uncaught TypeError:无法设置undefined的属性“2”,因为arr的索引仅定义在0和9之间。

好吧,从通用角度来看,这似乎是一个问题,您可以通过学习大O表示法以及它与计算机科学中的数据存储类型的关系来研究。这就是说,看起来你必须按照你所想的方式来做。好吧,从一般的角度来看,这似乎是一个问题,你可以通过学习大O符号以及它与计算机科学中的数据存储类型的关系来研究。这就是说,看起来你必须按照你所想的方式来做。你能解释一下二维数组如何工作并在这里使用吗?我的问题是网格是无限的,只定义了一些分片。所以第一种方法似乎更适合我。但由于我还需要保存和加载数据,这看起来有点难以实现。它是javascript对象,您可以将它们存储在JSON中,因此在mongoDB数据库中,找到一种正确的方法来创建磁贴似乎比存储和加载它们更难。您的问题取决于数据的大小,您可以等待多长时间来加载数据…谢谢您的帮助。我想我会将两个坐标映射到一个唯一的整数,我可以将其存储在一维数组中(这对我来说比较容易混淆),并将其另外存储在各个分片中。你能解释一下二维数组是如何工作和使用的吗?我的问题是网格是无限的,并且只定义了一些分片。所以第一种方法似乎更适合我。但由于我还需要保存和加载数据,这看起来有点难以实现。它是javascript对象,您可以将它们存储在JSON中,因此在mongoDB数据库中,找到一种正确的方法来创建磁贴似乎比存储和加载它们更难。您的问题取决于数据的大小,您可以等待多长时间来加载数据…谢谢您的帮助。我想我会将两个坐标映射到一个唯一的整数,我可以将其存储在一维数组中(这对我来说比较容易混淆),并将其另外存储在各个分幅中。你能解释一下二维数组在这里是如何工作和使用的吗?你能解释一下二维数组在这里是如何工作和使用的吗?