【问题标题】:iphone: how can i synchronize the contents of 2 NSMutableArrays?iphone:如何同步 2 个 NSMutableArrays 的内容?
【发布时间】:2010-09-08 08:15:12
【问题描述】:

我目前有一个 NSMutableArray 存储视频对象的集合。

每个视频对象都有一个 ID 和 TITLE。

我还有另一个通过解析 XML API 调用生成的视频对象 NSMutableArray。

当用户点击“同步”按钮时,我希望系统能够计算出使两个列表同步所需的最少操作数(删除和添加视频)。

这样做的最佳方法是什么? Objective-C 是否定义了任何这样做的方法?如果没有,是否有我可以实现的特殊算法?

(就个人而言,我宁愿不遍历两个列表中的每一项)

【问题讨论】:

  • 当你说同步你的意思是镜像一个阵列看起来像另一个?或者您将如何处理数组之间的差异?那么,如果每个数组中有额外的条目,它们会被复制到另一个数组中吗?
  • 第二个选项。即如果arrayA有2个arrayB没有的对象,它应该将它复制到arrayB...反之亦然。

标签: iphone objective-c algorithm synchronization nsmutablearray


【解决方案1】:

假设您只添加和删除视频,您可以拥有两个 NSMutableDictionaries,一个用于删除,另一个用于添加视频。 当您添加视频时,您会在 ADDDictionary 中添加一个条目,当您删除一个视频时,您首先检查它是否显示为 ADDDictionay 中的条目,如果是,则将其删除,否则您将条目添加到 DELDictionary。

【讨论】:

    【解决方案2】:

    如果您明智地实现了isEqual:hash,您可以使用-removeObjectsInArray: 来获得差异:

    NSMutableArray *old = ...;
    NSMutableArray *new = ...;
    
    NSMutableArray *toAdd    = [new mutableCopy];
    NSMutableArray *toDelete = [old mutableCopy];
    [toAdd    removeObjectsInArray:old];
    [toDelete removeObjectsInArray:new];
    

    但请注意,使用这种数据,字典或集合会更自然。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多