【问题标题】:Shifting a 2D array in C#在 C# 中移动二维数组
【发布时间】:2021-02-04 05:33:49
【问题描述】:

我有一个如下所示的二维数组:

values = new int[11, 11] {
        { 00, 00, 00, 00, 00, 20, 20, 20, 20, 20, 20},
        { 00, 20, 20, 20, 00, 20, 20, 20, 20, 20, 20},
        { 00, 00, 20, 20, 00, 20, 20, 20, 20, 20, 20},
        { 20, 20, 20, 20, 00, 00, 00, 00, 00, 00, 20},
        { 20, 20, 20, 20, 20, 20, 20, 20, 20, 00, 20},
        { 20, 20, 20, 20, 20, 20, 20, 20, 20, 00, 20},
        { 20, 20, 20, 20, 20, 20, 00, 00, 00, 00, 20},
        { 20, 20, 20, 20, 20, 20, 00, 20, 20, 20, 20},
        { 20, 20, 20, 20, 20, 20, 00, 20, 20, 20, 20},
        { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00},
        { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00},
    };

现在我需要将所有层向下移动 1,但所有行都需要保持不变。底部的层需要删除,顶部的层需要创建一个所有值都为 0 的新层。结果应如下所示:

values = new int[11, 11] {
    { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00},
    { 00, 00, 00, 00, 00, 20, 20, 20, 20, 20, 20},
    { 00, 20, 20, 20, 00, 20, 20, 20, 20, 20, 20},
    { 00, 00, 20, 20, 00, 20, 20, 20, 20, 20, 20},
    { 20, 20, 20, 20, 00, 00, 00, 00, 00, 00, 20},
    { 20, 20, 20, 20, 20, 20, 20, 20, 20, 00, 20},
    { 20, 20, 20, 20, 20, 20, 20, 20, 20, 00, 20},
    { 20, 20, 20, 20, 20, 20, 00, 00, 00, 00, 20},
    { 20, 20, 20, 20, 20, 20, 00, 20, 20, 20, 20},
    { 20, 20, 20, 20, 20, 20, 00, 20, 20, 20, 20},
    { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00},
};

我尝试使用 for 循环编写一个函数来执行此操作。但没有成功。这是一种尝试:

for(int row = 11; row > 0; row--) {
    for(int col = 0; col < 11; col++) {
        targets[row, col] = targets[row + 1, col]; 
    }
}

不幸的是,这是我唯一的尝试。 谁能帮我做这个或者有一个完成的功能来做这个?

感谢您的时间和帮助。

【问题讨论】:

  • 您能否分享您编写的代码,以及如何没有成功?

标签: c# arrays for-loop


【解决方案1】:

只需使用Array.Copy,它将与多维数组的连续内存一起使用

从指定的数组中复制一系列元素 源索引并将它们粘贴到另一个数组,从 指定的目标索引。指定长度和索引 作为 64 位整数。

Array.Copy(values,0, values,1, values.GetLength(0)* values.GetLength(1)-1);

Full Demo Here

更新

对不起,我用错了词。层需要向下移动一个 但行必须保持不变。

然后,你只需要做数学题

Array.Copy(values,0, values, values.GetLength(0)+1, values.GetLength(0) * values.GetLength(1) -values.GetLength(0)-1);

// Zero out the first row
Array.Copy(new int[values.GetLength(0)+1,1],0,values , 0,values.GetLength(0)+1);

Full Demo Here

【讨论】:

  • 对不起,我用错了词。层需要向下移动一个,但行必须保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
相关资源
最近更新 更多