据我所知,二维数组在内存中的布局与一维数组完全相同,只是使用不同的索引.所以考虑到这一点,似乎在C#中必须有某种方式(可能是不安全的)将1-D数组转换为2-D数组而不实际复制元素,假设您希望将1-D数组中的元素转换为第一行中的二维数组.我确实弄清楚如何使用单个复制命令完成此操作,但它似乎仍然需要更多处理:
int[] onedim = new int[] { 5, 3, 6, 2, 1, 5 };
int[,] twodim = new int[2, 3];
GCHandle pinnedArray = GCHandle.Alloc(twodim, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
Marshal.Copy(onedim, 0, pointer, onedim.Length);
pinnedArray.Free();
Run Code Online (Sandbox Code Playgroud)
有什么方法可以告诉C#,将这个1-D阵列视为具有这些尺寸的2-D阵列?不安全的代码很好.如果没有,这是语言的限制还是我缺少一些基本问题?
您可以尝试使用Buffer.BlockCopy以下方法:
Buffer.BlockCopy(onedim, 0, twodim, 0, onedim.Length * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
它也接受多维数组。
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |