2017-07-19 59 views
-3

我已经使用以下代码创建的C#中的2D网格的2D网格阵列的外边缘:算法来选择C#

for(int i = 0; i < 5; i++){ 
    for(int j = 0; j < 5; j++){ 
     array.add(new vector3(i,0,j); 
    } 
} 

这会给我坐标的列表,我可以作为2D使用格。 使用这个网格位置列表,我想选择并仅返回外部边缘坐标(可能创建第二个坐标列表)。

0, 0, 0, 0, 0 
0, 1, 1, 1, 0 
0, 1, 1, 1, 0 
0, 1, 1, 1, 0 
0, 0, 0, 0, 0 

例如,我想获得上面所有零点坐标的列表,并将它们添加到第二个列表中。如何最好地解决这个问题?

我的尝试使用了各种嵌套循环,这也创建了重复。所选答案看起来比嵌套循环更好,并且会返回我之后的值。

+4

你尝试过什么?我看到你的初始化代码,但我没有看到任何尝试找到坐标 – maccettura

+1

'我似乎无法有效地编写循环。“效率是你最后的问题。首先向我们展示你已经尝试过效率低下 –

+0

@BrianPeach你的问题有点不清楚。您的示例数据显示5行5列。你试图返回哪些**特定的**细胞,为什么? – mjwills

回答

1

你可以在嵌套循环上使用一些条件来丰富结果,但正如你所提到的,你需要一个有效的循环。 更快的方法是使用两个简单的循环:

1, 1, 1, 1, 1 
2, 0, 0, 0, 2 
2, 0, 0, 0, 2 
2, 0, 0, 0, 2 
1, 1, 1, 1, 1 

这个循环给你1秒:

for(int i = 0; i < array.length; i++){ 
    list.Add(array[i][0]); 
    list.Add(array[i][array.length-1]); 
} 

和这个人给你2S:

for(int i = 1; i < array.length -1; i++){ 
    list.Add(array[0][i]); 
    list.Add(array[array.length-1][i]); 
} 
-2

看来你想要所有的网格单元格的坐标值为0,并且其邻接单元格的值为1.因此,您需要访问每个网格单元格,检查这两个条件,如果它们通过添加坐标到列表。在网格边缘处计算相邻单元的坐标时要小心。

+0

只需等到您有足够的声誉,然后将其作为评论发布即可。 –