需要使用C#代码来查找二维数组中元素的邻居

本文关键字:二维数组 元素 邻居 查找 代码 | 更新日期: 2023-09-27 17:49:45

say具有12行10列的数组

int[,] array = new int[12,10];

并且我选择0,0,它必须返回0,0的所有邻居将是

0,1
1,1
1,0

说我想要2,3的邻居,它必须返回邻居的数组

1,2
1,3
1,4
2,2
2,4
3,1
3,2
3,3

需要使用C#代码来查找二维数组中元素的邻居

element [x, y]
neighbor1 = x + 1, y;
neighbor2 = x - 1, y;
neighbor3 = x, y + 1;
neighbor4 = x, y - 1;
neighbor5 = x + 1, y + 1;
neighbor6 = x + 1, y - 1;
neighbor7 = x - 1, y + 1;
neighbor8 = x - 1, y - 1;

显然,您需要检查这些元素坐标是否存在,以防元素位于矩阵的"边界"中。坚固的我说不。

Braindead和不良但说明性强且快速:

        int[,] array = new int[12,10];
        int refx=0, refy=10;
        var neighbours = from x in Enumerable.Range(0,array.GetLength(0)).Where(x => Math.Abs(x - refx)<=1)
                         from y in Enumerable.Range(0,array.GetLength(1)).Where(y => Math.Abs(y - refy)<=1)
                         select new {x,y};
        neighbours.ToList().ForEach(Console.WriteLine);

替代

        neighbours = from x in Enumerable.Range(refx-1, 3)
                     from y in Enumerable.Range(refy-1, 3)
                     where x>=0 && y>=0 && x<array.GetLength(0) && y<array.GetLength(1)
                     select new {x,y};
        neighbours.ToList().ForEach(Console.WriteLine);