【问题标题】:How would I combine two arrays in Objective-C?如何在 Objective-C 中组合两个数组?
【发布时间】:2011-01-19 22:41:31
【问题描述】:

什么是 JavaScript concat() 函数的 Objective-C 等效项?

假设两个对象都是数组,你会如何组合它们?

【问题讨论】:

  • 看起来你在做日历操作。请考虑使用NSCalendarNSDateComponents 和朋友为您做这些。它们不是一个微不足道的主题。您是否考虑过闰月?夏令时怎么样?闰秒呢?等等
  • @DaveDeLong - 现在我正在移植一个小型 Javascript 库。完成实际重写后,我将重构代码。我的第一个目标是在 Objective-C 中获取信息并在以后进行优化。

标签: ios objective-c


【解决方案1】:

NSArrayarrayByAddingObjectsFromArray: 或多或少等同于 JavaScript 的 .concat() 方法:

NSArray *newArray=[firstArray arrayByAddingObjectsFromArray:secondArray];

注意:如果firstArray 为零,newArray 将为零。这可以通过以下方式解决:

NSArray *newArray=firstArray?[firstArray arrayByAddingObjectsFromArray:secondArray]:[[NSArray alloc] initWithArray:secondArray];

如果要去除重复项:

NSArray *uniqueEntries = (NSArray *)[[NSSet setWithArray:newArray] allObjects];

【讨论】:

  • 这需要firstArray 成为NSMutableArray 吗?
  • @Moshe 它返回一个新的(不可变的)NSArray 对象,并且不会改变原始数组,因此它可以在 NSArray 对象上正常工作。
  • 答案有一个潜在的问题,如果firstArray为nil但第二个数组不是,则newArray为nil。
  • 好的,然后添加:if (!firstArray) firstArray = @[ ];
  • 然后确保您只获得唯一条目(如果这是您想要的): NSArray *uniqueEntries = [[NSSet setWithArray:newArray] allObjects];
【解决方案2】:

这是一种对称且简单的方法,只需从一个空数组开始:

NSArray* newArray = @[];
newArray = [newArray arrayByAddingObjectsFromArray:firstArray];
newArray = [newArray arrayByAddingObjectsFromArray:secondArray];

【讨论】:

    【解决方案3】:

    对于 Swift 版本,它的魅力:

    let a = [1,2,3]
    let b = [3,4]
    let c = a + b
    print(c)
    

    【讨论】:

    • 对不起 - 这个问题明确是关于 Objective-C 的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2010-11-20
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多