如何存储对2D数组元素的引用?

时间:2019-01-21 18:24:07

标签: c#

我正在检查2d数组的每个元素的特定条件。 如果该元素为true,则要检查它是否是直接相邻的相邻元素。 如果相邻元素为假,我想跟踪它们,则将其称为“ validElements”。 检查完所有元素后,我想随机选择一个有效元素并将其设为true,然后清除有效元素的集合并重复此过程任意次数。

我知道如何检查每个元素及其相邻元素的条件,但是我不确定跟踪对被视为“ validElements”元素的引用的正确方法。我应该如何跟踪这些数据?

public bool [,] Grid = new bool [3,3];

// lets make the middle element true so we have a starting point. 

Grid[Grid.GetLength(0) / 2, Grid.GetLength(1) / 2] = true;

for (int row = 0; row < Grid.GetLength(0); row++)
{
    for (int col = 0; col < Grid.GetLength(1); col++)
    {
        if (Grid[row, col])
        {
            // if neighboring cells are false keep track of them somehow
        }
    }
}

1 个答案:

答案 0 :(得分:1)

最基本的解决方案之一是创建一个坐标列表,您将在其中存储找到有效元素的所有X和Y。所以,在您

之前
for (int row = 0; row < Grid.GetLength(0); row++)

添加

var validElements = new List<(int x, int y)>();

,而不是您的

// if neighboring cells are false keep track of them somehow

if (/*some condition*/)
{
    validElements.Add((row, col));
}

接下来,一旦循环完成,您需要选择一个随机有效元素并将其设置为true。您可以通过

var random = new Random();
var randValidElement = validElements[random.Next(validElements.Count - 1)]; 
// above line is assuming you have at least one valid element. 
// You should do a check if validElements.Count == 0 then do something
Grid[randValidElement.x, randValidElement.y] = true; // this is the final step
相关问题