首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Array.Copy可以处理多维数组吗?

Array.Copy可以处理多维数组吗?
EN

Stack Overflow用户
提问于 2011-09-01 02:26:22
回答 4查看 33.2K关注 0票数 27

下面的代码运行良好:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var newArray = new Rectangle[newHeight, newWidth];

for (int x = 0; x < newWidth; x++)
    for (int y = 0; y < newHeight; y++)
        newArray[y, x] = (x >= width) || (y >= height) ? Rectangle.Empty : tiles[y, x];

但我不太幸运地用Array.Copy取代了它。基本上,如果调整大小的数组更大,它只会将空白矩形添加到边缘。如果它是小的,那么它应该只切掉边缘。

执行此操作时:

Array.Copy(tiles, newArray, newWidth * newHeight);

它会弄乱数组,数组中的所有内容都会变得无序,并且不会保留它们的原始索引。也许我只是在胡思乱想什么的?

EN

回答 4

Stack Overflow用户

发布于 2011-09-01 02:37:40

是。然而,它并不像你想的那样工作。相反,它将每个多维数组视为一维数组(这实际上是它们在内存中的位置,这只是一个技巧,让我们将一些结构放在它们上面,将它们视为多维结构),然后复制一维结构。所以如果你有

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 2 3
4 5 6

并希望将其复制到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x x x x
x x x x

然后,它会将第一个数组视为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 2 3 4 5 6

和第二个as

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x x x x x x x x

结果将会是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 2 3 4 5 6 x x

在您看来,它将显示为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 2 3 4
5 6 x x

明白了?

票数 40
EN

Stack Overflow用户

发布于 2013-05-08 10:00:17

我使用以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void ResizeBidimArrayWithElements<T>(ref T[,] original, int rows, int cols)
{

    T[,] newArray = new T[rows, cols];
    int minX = Math.Min(original.GetLength(0), newArray.GetLength(0));
    int minY = Math.Min(original.GetLength(1), newArray.GetLength(1));

    for (int i = 0; i < minX; ++i)
        Array.Copy(original, i * original.GetLength(1), newArray, i * newArray.GetLength(1), minY);

    original = newArray;

}

对字符串数组调用如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ResizeBidimArrayWithElements<string>(ref arrayOrigin, vNumRows, vNumCols);
票数 6
EN

Stack Overflow用户

发布于 2015-10-09 05:19:19

在下一个中断命中之前,我需要消耗缓冲区中的数据并将其复制到一个大型保持数组中。在循环中复制不是一个选择;太慢了。在所有复制完成之前,我不需要组合数据的多维结构,这意味着我可以Buffer.BlockCopy()到一维数组,然后再次复制到多维数组以获得所需的结构。下面是一些代码(在控制台中运行它),它们将演示该技术以及性能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static class Program
{
    [STAThread]
    static void Main()
    {
        Stopwatch watch = new Stopwatch();

        const int width = 2;
        const int depth = 10 * 1000000;

        //  Create a large array of data
        Random r = new Random(100);
        int[,] data = new int[width, depth];
        for(int i = 0; i < width; i++)
        {
            for(int j = 0; j < depth; j++)
            {
                data[i, j] = r.Next();
            }
        }

        //  Block copy to a single dimension array
        watch.Start();
        int[] buffer = new int[width * depth];
        Buffer.BlockCopy(data, 0, buffer, 0, data.Length * sizeof(int));
        watch.Stop();
        Console.WriteLine("BlockCopy to flat array took {0}", watch.ElapsedMilliseconds);

        //  Block copy to multidimensional array
        int[,] data2 = new int[width, depth];
        watch.Start();
        Buffer.BlockCopy(buffer, 0, data2, 0,buffer.Length * sizeof(int));
        watch.Stop();
        Console.WriteLine("BlockCopy to 2 dimensional array took {0}", watch.ElapsedMilliseconds);


        //  Now try a loop based copy - eck!
        data2 = new int[width, depth];
        watch.Start();
        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < depth; j++)
            {
                data2[i, j] = data[i, j];
            }
        }
        watch.Stop();
        Console.WriteLine("Loop-copy to 2 dimensional array took {0} ms", watch.ElapsedMilliseconds);
    }
}

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BlockCopy to flat array took 14 ms
BlockCopy to 2 dimensional array took 28 ms
Loop-copy to 2 dimensional array took 149 ms
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7265542

复制
相关文章
Java多维数组各轴长度可以不对齐
?
10JQKA
2018/05/09
8400
Java多维数组各轴长度可以不对齐
Java 数组及多维数组
注意一点,数组每行可以不等长 可以两种写法,直接枚举初始化,或者new type [len1][len2]... import java.util.Arrays; public class Myarray { public static void main(String[] args) { // 一维数组声明 int arr1 [] = new int[3]; int [] arr2 = {4,5,6}; a
Michael阿明
2021/09/06
2.1K0
多维数组遍历
多维数组遍历。实际为一维数组的嵌套,吧第一次遍历输出的值当做内部的数组继续遍历,三维数组遍历持续第二次的值当做第三次遍历的数组
十月梦想
2018/08/29
1.9K0
java多维数组
Java 是一种高级编程语言,广泛应用于各种软件开发和企业应用中。Java 语言支持多维数组,这是一个非常强大和有用的特性。多维数组可以帮助开发人员处理各种复杂的数据结构和算法,同时提高代码的可读性和可维护性。本文将详细介绍 Java 多维数组的概念、用法和示例。
堕落飞鸟
2023/04/03
1.7K0
【C 语言】数组 ( 多维数组本质 | 步长角度 理解 多维数组本质 )
array + i 表示第 i 行的地址 , 整个第 i 行地址 , array 是 二级指针 ;
韩曙亮
2023/03/29
5.7K0
【C 语言】数组 ( 多维数组本质 | 步长角度 理解 多维数组本质 )
多维数组取值问题
给予一个多维数组和一个描述取值路径的一维数组, 通过调用函数f返回取值路径描述的值,如 f([[1, 2], [3, 4], [5, 6]], [0, 0]) -> 1
littlelyon
2018/10/19
2.4K0
4,array多维数组
float16('f2'),float32('f4'),float64('f8')
lyhue1991
2020/07/17
1.7K0
多维数组的传递
接收多维数组的函数,可以省略相当于开头下标的n维的元素个数。但是,(n - 1)维之下的元素个数必须是常量。 以下是接收一维、二维、三维数组的参数的声明示例: void func1(int v[], int n); //元素类型为int、元素个数随意(n)。 void func2(int v[][3], int n); //元素类型为int[3]、元素个数随意(n)。 void func3(int v[][2][3], int n); //元素类型为int[2][3]、元素个数随
Zoctopus
2018/06/04
2.1K0
Java 多维数组遍历
数组是Java中的一种容器对象,它拥有多个单一类型的值。当数组被创建的时候数组长度就已经确定了。在创建之后,其长度是固定的。下面是一个长度为10的数组:
哲洛不闹
2018/09/19
2.6K0
Java 多维数组遍历
ArrayList 可以完全替代数组吗?
在前面的文章里,我们学习了很多数据结构与算法思想。在实际的业务开发中,往往不需要我们手写数据结构,而是直接使用标准库的数据结构 / 容器类。
用户9995743
2022/12/22
7530
ArrayList 可以完全替代数组吗?
C++:数组与多维数组
数组与vector类似,可以储存固定大小、类型相同的顺序集合,但是在性能和灵活性的权衡上与vector不同。并且元素应为对象,所以不存在引用的数组,但是存在数组的引用。与vector不同的是,数组的大小确定不变,不能随意向数组增加元素。如果不清楚元素的确切个数,请使用vector。定义数组的时候必须指定数组的类型,不允许使用 auto 关键字由初始值的列表推断类型。
用户7886150
2021/02/03
2K0
VBA多维数组转一维数组
在VBA中,join函数可以快速的将一个String类型的数组连接成一个字符串,用的还比较多。
xyj
2021/06/22
2.3K0
VBA多维数组转一维数组
多维数组的理解
要清楚的理解多维数组,需要先理解指针的算术运算和数组名的含义。 1、指针的算术运算     指针的算术运算与普通的类型的算术运算是不同的,编译器会在指针的算术运算的过程中自动乘以sizeof(type),如int p=1;p=p+2;则p=3;而int *p; (假如p指向的初始地址位2000),那么p=p+2;实际上指向的是2000+2*sizeof(int),32位系统下的结果为2008。 2、多维数组名字的理解     对于数组名大家都知道可以理解为指针,可究竟这个指针指向的内容是什么呢?这个我没法直
用户1215536
2018/02/05
2.3K0
C语言:多维数组
多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:
用户6755376
2020/04/14
4.2K0
C语言:多维数组
php 多维数组去空值字段/多维数组改键名称
我有这样一个需求,下面我以json格式展示便于查看结构。我需要删除多维数组中的空字段/指定字段,并且修改某些字段的键名称。 [ { "_id":1, "name":"笔记本整机", "tag":"", "list":[ { "_id":19, "name":"笔记本", "tag":"",
友儿
2022/09/11
3.1K0
java 对多维数组的工具类(比如遍历多维数组工具类)
目录 1 遍历int类型二维数组 2 使用流遍历int 类型二维数组 3 遍历 float 类型二维数组 4 遍历 double 类型二维数组 5 遍历 int 类型 3维数据 6 遍历 Float 类型 3维数据 1 遍历int类型二维数组 public static void printErIntArray(int[][] matrix){ for (int i = 0; i < matrix.length; i++) { //this equals to the row in our
一写代码就开心
2022/06/28
2K0
java 多维数组初始化_用Java初始化多维数组
// 4 x 5 String arrays, all Strings are null
用户7886150
2021/04/25
2K0
Numpy入门之 多维数组
多维数组是用来描述多层嵌套的数据的一种模型,(如 图书馆的 楼,层,房间,书架,书架上的行和列),出于内存对齐的需要,它要求同一级的子数组要有相同的形状尺寸,还要求每个元素的数据类型相同。(6维数组可以类比这样一个特殊的图书馆,它每栋楼都有相同的层数,每一层都有相同的房间数,每个房间都有相同数量的书架,每个书架都有相同的行数,书架上每一行只能放相同数量的书。)。
用户6021899
2019/08/14
8560
python 多维数组的排序
这几天写php程序,发现php里有一个array_multisort()函数十分好用,可以轻松对多维数组进行排序,查了查python的相关资料,视乎没有一个比较直接的函数来完成多维数组的排序
py3study
2020/01/08
3K0
Java基本语法——数组结构(多维数组)
本讲继续讲解了Java的基础语法,数据结构数组,数组也是Java很多数据结构的一个重要部分之一,一般开发中其实很少使用数组,反而用相关集合类,比如List和ArrayList,这些性能以及对应的api调用比数组丰富,我们后续慢慢也会讲解和使用这些集合类。
小明爱吃火锅
2023/09/29
2220

相似问题

代码可以处理数组,但不能处理多维数组。

20

可以将多维std::数组作为连续数据块处理吗?

14

PHP能处理多维$_REQUEST数组吗?

20

Javascript可以动态创建多维数组吗?

23

Javascript:可以动态创建多维数组吗?

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文