我有一个 3D 列表(3 个嵌套列表),对于列表中的每个项目,我需要找到相邻的项目。目前,我正在为每个相邻项目创建一个数组,并将其存储在每个项目中。这是相当资源密集型的,所以我希望稍微简化一下。
我正在考虑使用这种方法:
for (int i = 0; i < 8; i++)
{
switch (i)
{
case (0):
mapCell neighbor = myMap.Depth[z].Rows[x].Columns[y - 1];
case (1):
mapCell neighbor = myMap.Depth[z].Rows[x].Columns[y + 1];
case (2):
mapCell neighbor = myMap.Depth[z].Rows[x - 1].Columns[y];
case (3):
mapCell neighbor = myMap.Depth[z].Rows[x + 1].Columns[y];
case (4):
mapCell neighbor = myMap.Depth[z].Rows[x + 1].Columns[y + 1];
case (5):
mapCell neighbor = myMap.Depth[z].Rows[x + 1].Columns[y - 1];
case (6):
mapCell neighbor = myMap.Depth[z].Rows[x - 1].Columns[y + 1];
case (7):
mapCell neighbor = myMap.Depth[z].Rows[x - 1].Columns[y - 1];
}
// do some stuff with the neighbor here
}
就性能而言,这比我现在拥有的要好得多,但我想知道是否有更简单的方法来实现这一点?看起来有点乱,我真的觉得有一种方法可以在 1 行中做到这一点,但我就是无法弄清楚数学。
编辑:对不起,我可能遗漏了一些重要的细节。与“邻居”变量一起使用的代码已被忽略,因为它很长并且对解决方案没有帮助。我不需要维护“邻居”变量的列表(这就是我目前正在做的事情,它使用了太多的内存(大约 400 兆)。我只需要一种快速的方法来查看每个项目,找到每个相邻的 8 个项目,一次对它们做一些事情,然后移动到下一个节点。上面的代码可以通过它们,但感觉不是最优化的方法。