是数组.只复制一个维度

本文关键字:一个 数组 复制 | 更新日期: 2023-09-27 18:14:30

快速检查。是数组。只能复制一维数组,还是可以处理更多?

。. Net框架阵列。复制


在阅读规格时,我将其理解为(可能是错误的)匹配必须发生在第二次元。ie。源索引和目的索引可以不同,并且可以指定元素的个数。

好了,让我们来看看"match"。对于一个2级数组复制到另一个2级数组,比如10x4到20x4,我们是说我们必须匹配维度1和维度2,还是只匹配维度2。我只需要在第二次元上。

是在。net中通过循环机制实现这一点的唯一方法。如果是这样,这将比块复制慢得多。


看看这个:

    static void Main(string[] args)
    {
        var A = new int[2,4] {{1, 1, 1, 1}, {2, 2, 2, 2}};
        var B = new int[4,4];
        var C = new int[4, 4];
        Array.Copy(A, 0, B, 4, 8);
        Array.ConstrainedCopy(A, 0, C, 8, 8); // haven't noticed this method before.  Same behaviour though.

    }

注意,我们必须在世界的一维视图中指定正确的起点。

是数组.只复制一个维度

引用自此处:

在多维数组之间进行复制时,数组的行为类似于长一维数组,其中的行(或列)概念上首尾相连的例如,如果一个数组有三行(或列),每个包含四个元素,从数组的开始部分将复制第一行的所有四个元素(或列)和第二行(或列)的前两个元素。

只要源和目的匹配,支持单维和多维。

http://msdn.microsoft.com/en-us/library/k4yx47a1.aspx

sourceArray和destinationArray参数必须相同尺寸数。

在多维数组之间进行复制时,数组的行为类似于长一维数组,其中的行(或列)概念上首尾相连的例如,如果一个数组有三行(或列),每个包含四个元素,从数组的开始部分将复制第一行的所有四个元素(或列)和第二行的前两个元素(或c

)
编辑:

把匹配想象成"端到端"的排列方式。二维数组实际上就是连续的内存块——3 x 4 = 12个块。当它复制时,它会复制布局,端到端布局。关键是他们说概念上首尾相连的那一行

From: Copy Method (Array, Array, Int32)

sourceArray和destinationArray参数必须相同尺寸数。

如果你想从一个单维数组复制到一个数组的数组(这在使用上有点像一个多维数组),你只需要在循环中使用Array.Copy。例如,我在尝试将BitmapData数组转换为更合乎逻辑的东西(如二维数组)时使用了这一点。

Dim bitmapData As Imaging.BitmapData = myBitmap.LockBits(New Rectangle(0, 0, myBitmap.Width, myBitmap.Height), Imaging.ImageLockMode.ReadOnly, myBitmap.PixelFormat)
Dim size As Integer = Math.Abs(bitmapData.Stride) * bitmapData.Height
Dim data(size - 1) As Byte
Marshal.Copy(bitmapData.Scan0, data, 0, size)
Dim pixelArray(myBitmap.Height)() As Byte
'we have to load all the opacity pixels into an array for later scanning by column
'the data comes in rows
For y = myBitmap.Height - 1 To 0 Step -1
    Dim rowArray(bitmapData.Stride * 4) As Byte
    Array.Copy(data, y * bitmapData.Stride, rowArray, 0, bitmapData.Stride)
    pixelArray(y) = rowArray
Next