我想将2D数组复制到第二个2D数组中,但仅限于第一个维度。
即。 arrayA到arrayB但只有arrayA [0]到arrayB [0]。
使用新方法,因为使用它对我的应用来说太慢了。 .NET或C#中是否有任何功能或方法可以实现此目的?
提前致谢。
答案 0 :(得分:0)
来自Array.Copy
https://msdn.microsoft.com/en-us/library/y5s0whfd(v=vs.110).aspx
在多维数组之间进行复制时,数组的行为类似于长一维数组,其中行(或列)在概念上是端对端放置的。例如,如果一个数组有三行(或列),每行包含四个元素,则从数组开头复制六个元素将复制第一行(或列)的所有四个元素和第二行的前两个元素(或列)。要从第三行(或列)的第二个元素开始复制,sourceIndex必须是第一行(或列)的上限加上第二行(或列)的长度加上两个。
要复制数组的一个维度,您需要执行类似这样的操作。想象一下,我们array1
和array2
是二维的,并且都有相应的尺寸。
所以你只需做Array.Copy(array1, array2, array1.GetLength(0))
之类的事情。复制第二维将类似于Array.Copy(array1, array1.GetLength(0), array2, array1.GetLength(1))
等等。
如果你想要一个解释,想象你有一个看起来像这样的数组。这不是内存布局,只是表格的表示。
a[0,0] a[0, 1] ... a[0, n]
a[1,0] a[1, 1] ... a[1, n]
. . .
a[m, 0] a[m, 1] ... a[m, n]
因此,Array.GetLength(0)
为n + 1
,Array.GetLength(1)
为m + 1
。现在想象它是如何在记忆中布局的。
看起来像这样
a[0,0] a[0, 1] ... a[0, n] a[1,0] a[1, 1] ... a[1, n] ... a[m, 0] a[m, 1] ... a[m, n]
那么,通过一些计算,你可以通过想象它在内存中的布局来从任何位置复制到任何位置。