跌倒二维数组中的元素

时间:2019-03-10 18:34:11

标签: c#

您好,正在寻找一个简单的循环,例如数字将落入二维数组

0 0 0 3 3
2 1 3 1 1
1 1 5 1 1
1 2 0 0 0
0 0 0 0 2

预期:

0 0 0 0 0
0 0 0 0 3
2 1 0 3 1
1 1 3 1 1
1 2 5 1 2 

您有建议吗?谢谢。

提示:下降意味着非零项目必须在每一列中下降!

2 个答案:

答案 0 :(得分:3)

这是一个解决方案:

void FallDown(ref int[,] numbers)
{
    var rowCount = numbers.GetLength(0);
    for (var c = 0; c < numbers.GetLength(1); c++)
    {
        var colValues = new List<int>();
        for (var r = 0; r < rowCount; r++)
        {
            var colValue = numbers[r, c];
            if (colValue > 0)
            {
                colValues.Add(colValue); // collect only non-zero values
            }
        }
        if (colValues.Count < rowCount) // there were zeroes ...
        {
            do
            {
                colValues.Insert(0, 0); // fill it up with leading zeroes.
            } while (colValues.Count < rowCount);
            for (var r = 0; r < rowCount; r++) {
                numbers[r, c] = colValues[r]; // put numbers back into original array
            }
        }
    }
}

结果将替换为原始数组,这就是为什么ref传递结果的原因。

答案 1 :(得分:0)

找到了。

  public void FallDown()
   {

        for (var row = 0; row < RowCount - 1; row++)
        {

            for (var column = 0; column < ColumnCount; column++)
            {
                if (tiles[row + 1, column] == 0 && tiles[row, column] != 0)
                {
                    tiles[row + 1, column] = tiles[row, column];
                    tiles[row, column] = 0;
                    row = 0;
                    column = 0;
                }
            }
        }
    }