C# 是数组。是否仅复制一个维度?

C# 是数组。是否仅复制一个维度?,c#,.net,C#,.net,快速健康检查。是数组。复制仅用于一维数组,还是可以处理更多 在阅读规格时,我读到(可能是错误的)意味着匹配必须发生在第二维度上。也就是说,源索引和目标索引可以不同,我们可以指定元素的数量 好的,让我们来看看“比赛”。对于一个秩2的数组被复制到另一个秩2的数组,比如10x4到20x4,我们是说我们必须在维度1和维度2上匹配,还是只在维度2上匹配。我只需要它在第二维度上 是通过.net中的循环机制实现这一点的唯一方法。如果是这样,那将比块拷贝慢得多 看看这个: static void

快速健康检查。是数组。复制仅用于一维数组,还是可以处理更多


在阅读规格时,我读到(可能是错误的)意味着匹配必须发生在第二维度上。也就是说,源索引和目标索引可以不同,我们可以指定元素的数量

好的,让我们来看看“比赛”。对于一个秩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.


    }
请注意,我们必须在一维世界视图中指定正确的起点。我没想到会这样。

引用:

在多维数组之间复制时,数组的行为类似于 长一维数组,其中行(或列)为 从概念上讲是端到端的。例如,如果一个数组有三行 (或列)每个包含四个元素,从 数组的开头将复制第一行的所有四个元素 (或列)和第二行(或列)的前两个元素

引自:

在多维数组之间复制时,数组的行为类似于 长一维数组,其中行(或列)为 从概念上讲是端到端的。例如,如果一个数组有三行 (或列)每个包含四个元素,从 数组的开头将复制第一行的所有四个元素 (或列)和第二行(或列)的前两个元素

发件人:

sourceArray和destinationArray参数必须具有相同的值 尺寸的数量

发件人:

sourceArray和destinationArray参数必须具有相同的值 尺寸的数量


只要源和目标匹配,它就支持单维和多维

sourceArray和destinationArray参数必须具有相同的值 尺寸的数量

在多维数组之间复制时,数组的行为类似于 长一维数组,其中行(或列)为 从概念上讲是端到端的。例如,如果一个数组有三行 (或列)每个包含四个元素,从 数组的开头将复制第一行的所有四个元素 (或列)和第二行(或c)的前两个元素

编辑:


以“端到端”的布局方式思考比赛二维数组实际上只是连续的内存块-3 x 4=12个块。当它复制时,它将复制布局-端到端布局。关键是他们说它在概念上是端到端放置的线。

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

sourceArray和destinationArray参数必须具有相同的值 尺寸的数量

在多维数组之间复制时,数组的行为类似于 长一维数组,其中行(或列)为 概念上是端到端排列的。例如,如果一个数组有三行 (或列)每个包含四个元素,从 数组的开头将复制第一行的所有四个元素 (或列)和第二行(或c)的前两个元素

编辑:


以“端到端”的布局方式思考比赛。二维数组实际上只是连续的内存块-3 x 4=12个块。当它复制时,它将复制布局-端到端布局。关键是他们说它在概念上是端到端排列的那一行。

如果你想从一维数组复制到数组(在使用中有点像多维数组),您只需使用
array。在循环中复制
。例如,我在尝试将
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

如果你想从一个一维数组复制到一个数组数组(在使用中有点像多维数组),你只需要在循环中使用
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

您是否阅读了您提供的链接中的任何方法页面?@Alastair Pitts:是的。请查看更新的问题。目前正在研究适用于排名1的数组的实时代码,但不适用于排名2(或更高)的数组。因此,问题就来了。关键是“端到端”的引用在文档上。这是每个维度端到端的布局。编辑了我的答案……你有没有阅读过你提供的链接中的任何方法页面?@Alastair Pitts:有。请查看更新的问题。目前正在查看适用于排名1的数组的实时代码,但不适用于排名2(或更高)的数组。这就是问题所在。关键是文档中对“端到端”的引用。这是每个维度端到端的布局。编辑了我的答案…认为我现在到了那里(请参见编辑中的代码示例)。认为我希望功能稍微丰富一些。我可以用这个想法工作。谢谢。认为我现在到了那里(请参见编辑中的代码示例).我想我希望功能稍微丰富一些。我可以用这个想法。谢谢。