【问题标题】:Objective-C: How to append uniques items from an array to another array?Objective-C:如何将唯一项从一个数组附加到另​​一个数组?
【发布时间】:2014-05-13 22:09:50
【问题描述】:

我有一个数组,想将另一个数组中的 N 个项目附加到它,但只有当前数组中不存在的项目。

注意,item 的唯一性不是由对象内存决定的,而是由它的内容决定的。例如,我可以有两个名为“David”的不同对象,而我在最终结果中只有一个。

什么是执行此操作的有效方法?我已经查看了使用 NSPredicate 和 NSOrderedSet 的选项。

【问题讨论】:

  • 听起来你想使用 NSSet、NSOrderedSet 和可变对应物。
  • @vikingosegundo - 能像他要求的那样过滤独特的对象吗?内存中不重复但基于匹配属性重复的对象?
  • 只需在Person 中覆盖isEqual: 就可以了
  • 当然,如果公平性得到正确实现。 nshipster.com/equality
  • @vikingosegundo - 感谢您的文章和澄清......好东西。

标签: objective-c nsarray nspredicate nsset


【解决方案1】:

[@[arrayOne,arrayTwo] valueForKeyPath:@"@distinctUnionOfArrays.name"] 其中name 是用于合并数组的属性。

查看 NSHipster 的KVC Collection Operators

【讨论】:

    【解决方案2】:

    使用 NSSet 可以轻松实现。这是一个示例解决方案:

    //Lines of init can be ignored. Just pay attention to the variables and their comments
    
    NSArray * old = [[NSArray alloc]init]; //Assume this is your old array 
    NSArray * more = [[NSArray alloc]init]; //Assume this is your extra array
    NSArray * new = [[NSArray alloc]init]; //Assume this is your new array (having duplicates)
    new = [old arrayByAddingObjectsFromArray:more];
    NSArray *cleanedArray = [[NSSet setWithArray:new] allObjects];
    

    为了解释,NSSet 会自动删除重复项。

    警告:它不会保留订单。如果您想继续保持顺序,请在之后进行排序,否则会有更复杂的解决方案。

    【讨论】:

    • 我认为stackoverflow.com/questions/1025674/… 中的一个线程建议了另一种使用 NSOrderedset 的方法,您也可以在其中保留数组的顺序。但是由于您的任务是追加然后消除,因此 NSOrderedset 可能不会像预期的那样有用。无论如何,你必须重新排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2017-08-04
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多