在 C# 中移动二维数组
Posted
技术标签:
【中文标题】在 C# 中移动二维数组【英文标题】:Shifting a 2D array in 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];
不幸的是,这是我唯一的尝试。 谁能帮我做这个或者有一个完成的功能来做这个?
感谢您的时间和帮助。
【问题讨论】:
您能否分享您编写的代码,以及如何没有成功? 【参考方案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
【讨论】:
对不起,我用错了词。层需要向下移动一个,但行必须保持不变。以上是关于在 C# 中移动二维数组的主要内容,如果未能解决你的问题,请参考以下文章
C# 中锯齿状数组的内存分配与 C++ 中的二维数组内存分配