当前位置: 首页 > 面试题库 >

快速复制对象数组的深层副本

葛景龙
2023-03-14
问题内容

我有一个叫Meal的课程

class Meal {
    var name : String = ""
    var cnt : Int = 0
    var price : String = ""
    var img : String = ""
    var id : String = ""

    init(name:String , cnt : Int, price : String, img : String, id : String) {
        self.name = name
        self.cnt = cnt
        self.price = price
        self.img = img
        self.id = id
    }
}

而且我有很多餐:

var ordered = [Meal]()

我想复制该数组,然后在其中一个实例中对Meal实例进行一些更改,而在第二个实例中不更改Meal实例,我将如何对其进行深拷贝?


问题答案:

由于ordered是一个快速数组,所以该语句

 var orderedCopy = ordered

将有效地复制原始数组。

但是,由于Meal是一 ,因此新数组将包含对原始膳食中相同膳食的引用。

如果您也想复制进餐内容,那么在一个数组中更改进餐不会在另一个数组中更改进餐,那么您必须将Meal定义struct 而不是类:

struct Meal { 
  ...

从苹果书中:

使用struct创建结构。结构支持许多与类相同的行为,包括方法和初始化程序。结构和类之间最重要的区别之一是,结构在代码中传递时始终会被复制,而类是通过引用传递的。



 类似资料:
  • 问题内容: 我想使用构造函数制作对象数组的深层副本。 但是,由于某种原因,我上面的内容不起作用。我有运行的自动化测试,但未通过这些测试。所以这里有一个错误,我不确定是什么。 问题答案: 您已实现的是 浅表 副本。要实现 深度 复制,您必须进行更改 一些事情,分配一个 副本 的到。您如何执行此操作取决于班级。可能的替代方法是: 复制构造函数: 工厂方法: 克隆: 笔记: 上面假设复制构造函数,工厂方

  • 问题内容: 实现深层对象复制功能有点困难。您采取什么步骤来确保原始对象和克隆对象没有引用? 问题答案: 一种安全的方法是序列化对象,然后反序列化。这样可以确保所有内容都是全新的参考。 这是有关如何有效执行此操作的文章。 注意事项:类可能会覆盖序列化,这样就不会创建新实例,例如单例。如果您的课程不是可序列化的,那么这当然也行不通。

  • 编辑:@Rohit Jain 我的Recipe类和Ingreatent类(Recipe数组保存的对象)都有toString方法和recipes对Ingreats的调用,以便以一个漂亮的小格式将其全部打印出来。当我在我的“recipeone”对象(即意大利辣香肠披萨)上调用它时,我得到的是“意大利辣香肠披萨:1.0磅面团,8.0盎司酱汁,10.0盎司奶酪”。 然后我继续制作对象ressippi并将其

  • 问题内容: 我正在使用。我想将对象的值复制到另一个对象中。我尝试用encoding / gob和encoding / json做到这一点。但是gob编码比json编码花费更多的时间。我看像其他一些问题,这和他们建议采空区编码应该是更快的。但我看到完全相反的行为。有人可以告诉我我做错了什么吗?还是有比这两个更好,更快的方法来进行深度复制?我的对象的结构是复杂且嵌套的。 测试代码: 我得到以下输出:

  • 问题内容: 从某些索引开始,肯定有一些使用Swift拷贝数组末尾的非常优雅的方法,但是我只是找不到它,所以我以此结束: 有没有其他功能的更好方法吗? 问题答案: 还有一个… 这给出了对于大多数目的来说应该足够好的。如果您需要一个真实的,请使用 如果起始索引大于(或等于)元素计数,则会创建一个空数组/切片。

  • 问题内容: 我只是在数组上使用过,以为这是一个深复制。 如何执行阵列的深层复制? 我应该遍历它并执行一系列的操作吗? 问题答案: 是的,你应该遍历2D布尔数组以进行深复制。如果你使用的是Java 6,请同时查看方法。 我建议使用Java 6的下一个代码: