C#-创建空心矩形

本文关键字:空心 创建 C#- | 更新日期: 2023-09-27 18:24:29

我正在使用一个多维数组来创建一个"边界"。如果打印出来,它会看起来像这样:

######
#    #
#    #
#    #
######

到目前为止,我拥有的代码可以创建顶部、左侧和底部边界。目前我不知道如何为它的右手边创建边界。

int[,] array = new int[10, 10];
//Create border around box
//Top
for (int i = 0; i < array.GetLength(0); i++)
{
    array[0, i] = 1;
}
//Bottom
for (int i = 0; i < array.GetLength(0); i++)
{
    array[array.GetLength(0) - 1, i] = 1;
}
//Left
for (int i = 0; i < array.GetLength(0); i++)
{
    array[i, 0] = 1;
}

如何在右侧创建边界?此外,我认为我的代码可以改进,我是C#的新手。

感谢

C#-创建空心矩形

右侧边界

右侧边界是底部边界沿对角线(从左上到右下)的反射。所以,取底部的绘图代码,并反转x和y坐标。它给出:

// Right
for (int i = 0; i < array.GetLength(0); i++)
{
    array[i, array.GetLength(0) - 1] = 1;
}

代码改进

您的代码是正确的。我只建议两个改进:

首先,在C#中,数组维度在创建数组后不能更改,并且您知道数组的大小:10。因此,让我们用一个名为arraySize的int替换所有的array.GetLength(0)

const int arraySize = 10;    
int[,] array = new int[arraySize, arraySize];
//Create border around box
//Top
for (int i = 0; i < arraySize; i++)
{
    array[0, i] = 1;
}
//Bottom
for (int i = 0; i < arraySize; i++)
{
    array[arraySize - 1, i] = 1;
}
//Left
for (int i = 0; i < arraySize; i++)
{
    array[i, 0] = 1;
}
// Right
for (int i = 0; i < arraySize; i++)
{
    array[i, arraySize - 1] = 1;
}

第二个改进。多次使用相同的循环。让我们把它们合并在一起。

const int arraySize = 10;    
int[,] array = new int[arraySize, arraySize];
// Create border around box
for (int i = 0; i < arraySize; i++)
{
    array[0, i] = 1;  // Top
    array[arraySize - 1, i] = 1;  // Bottom
    array[i, 0] = 1;  // Left
    array[i, arraySize - 1] = 1;  // Right
}

既然所有for循环都有相同的边界,为什么不在一个循环中这样做呢:

 for (int i = 0; i < array.GetLength(0); i++)
        {
        //Top
            array[0, i] = 1;
        //Bottom    
        array[array.GetLength(0) - 1, i] = 1;
        //Left
        array[i, 0] = 1;
        // Right
        array[i, array.GetLength(0) - 1] = 1;
        }
int x = 10;
int y = 10;
int[,] array = new int[x, y];
  // iterate over the left coordinate
foreach(int i in Enumerable.Range(0, x))
{
  array[i,0] = 1;    //bottom
  array[i,y-1] = 1;  //top
}
  // iterate over the right coordinate
foreach(int i in Enumerable.Range(0, y))
{
  array[0,i] = 1;    //left
  array[x-1,i] = 1;  //right
}