我可以指定要在array.copy中复制的维度或任何替代方法吗?

时间:2015-03-06 10:19:33

标签: c# arrays multidimensional-array

我想将2D数组复制到第二个2D数组中,但仅限于第一个维度。

即。 arrayA到arrayB但只有arrayA [0]到arrayB [0]。

使用新方法,因为使用它对我的应用来说太慢了。 .NET或C#中是否有任何功能或方法可以实现此目的?

提前致谢。

1 个答案:

答案 0 :(得分:0)

来自Array.Copy

的文档

https://msdn.microsoft.com/en-us/library/y5s0whfd(v=vs.110).aspx

  

在多维数组之间进行复制时,数组的行为类似于长一维数组,其中行(或列)在概念上是端对端放置的。例如,如果一个数组有三行(或列),每行包含四个元素,则从数组开头复制六个元素将复制第一行(或列)的所有四个元素和第二行的前两个元素(或列)。要从第三行(或列)的第二个元素开始复制,sourceIndex必须是第一行(或列)的上限加上第二行(或列)的长度加上两个。

要复制数组的一个维度,您需要执行类似这样的操作。想象一下,我们array1array2是二维的,并且都有相应的尺寸。

所以你只需做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 + 1Array.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]

那么,通过一些计算,你可以通过想象它在内存中的布局来从任何位置复制到任何位置。