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行でこれを行う方法があるように感じますが、数学を理解することはできません.
編集:申し訳ありませんが、重要な詳細をいくつか省略している可能性があります。「neighbor」変数で動作するコードは、非常に長く、解決に役立たないため、省略されています。「隣人」変数のリストを維持する必要はありません (これは私が現在行っていることであり、あまりにも多くのメモリ (約 400 メガバイト) を使用します) を使用します。隣接する 8 つの項目を一度に 1 つずつ操作してから、次のノードに移動します. 上記のコードはそれらを通過するために機能しますが、これを達成するための最も最適化された方法とは思えません.