HarmonyOS 鸿蒙Next如何对数组进行深拷贝?

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next如何对数组进行深拷贝?

如何对数组进行深拷贝? 我需要对一个原始数组进行筛选创建出2个特定的数组。代码如下:  

//第一个数组 let firstSprogInterestList = liveStreamListData.sprogInterestList 
//先删除后5个 
console.log(“第一个数组 先删除后5个”)
firstSprogInterestList.pop();
firstSprogInterestList.pop();
firstSprogInterestList.pop();
firstSprogInterestList.pop();
firstSprogInterestList.pop();  
//第二个数组 
let secondSprogInterestList = liveStreamListData.sprogInterestList 

 现在的问题就是:当我对第二个数组进行操作的时候,原始数组liveStreamListData.sprogInterestList已经被第一个数组的操作给改动过了。 而我想要的效果是:将原始数组赋值给第一个数组的时候进行深拷贝,这样对第二个数组进行处理的时候原始数组里的数据不会因为第一个数组的操作而数据变动


更多关于HarmonyOS 鸿蒙Next如何对数组进行深拷贝?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next如何对数组进行深拷贝?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,对数组进行深拷贝通常涉及到内存管理和数据结构的复制。以下是如何实现数组深拷贝的简要说明:

  1. 基础数组类型:对于基础数据类型(如int、float等)的数组,可以使用标准C++库中的std::copy函数或手动循环复制每个元素。不过,由于要求不使用C语言相关内容,这里以C++风格描述,但实际在鸿蒙系统中可能需要结合系统API来实现。鸿蒙系统提供了内存管理函数,如memcpy,可以直接用于基础数据类型的数组深拷贝。

    int src[] = {1, 2, 3, 4};
    int* dest = new int[sizeof(src)/sizeof(src[0])];
    memcpy(dest, src, sizeof(src));
    
  2. 对象数组:对于对象数组,需要实现对象的拷贝构造函数或使用深拷贝逻辑。鸿蒙系统可能提供了针对对象数组的特定API,或者需要手动实现对象的逐个复制。

    MyClass src[] = {obj1, obj2, obj3};
    MyClass* dest = new MyClass[sizeof(src)/sizeof(src[0])];
    for(int i = 0; i < sizeof(src)/sizeof(src[0]); i++) {
        dest[i] = src[i].DeepCopy(); // 假设MyClass有DeepCopy方法
    }
    

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部