c# - 落下二维数组中的元素

标签 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 

你有什么建议吗?谢谢。

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

最佳答案

解决方法:

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传入的原因。

关于c# - 落下二维数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55091008/

相关文章:

c# - 使用 linq group by 从具有 DateTime 属性的对象列表获取具有间隔 StartDate、EndDate 的列表

c# - 将网页复制到 Word 或其他文字处理器中

c# - 如何在Web应用程序中实现TCP/IP响应器 "service"

c# - 如何强制 hangfire 服务器在重启时删除该特定服务器的旧服务器数据?

c# - NHibernate:如何从单元测试项目中引用主项目的程序集?

c# - 在 C# 中计算耗时时出现夏令时问题

c# - 使用 EF 查询的最佳方式

c# - IIS 和 asp.net appcmd

c# - 如何使用 DynamicResource 更新 SolidColorBrush 颜色?

c# - Blazor 服务器端 - 使用 StateHasChanged Loop 进行实时更新