如何在Objective-C中合并两个数组?


75

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

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


看来您正在执行日历操作。请考虑使用NSCalendarNSDateComponents和朋友为您做。他们不是一个小课题。您是否考虑leap月?夏令时怎么样?leap秒呢?等
Dave DeLong

@DaveDeLong-现在我正在移植一个小的Javascript库。完成实际的重写后,我将重构代码。我的首要目标是在Objective-C中获取信息,并在以后进行优化。
Moshe

Answers:


214

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

NSArray *newArray=[firstArray arrayByAddingObjectsFromArray:secondArray];

注意:如果firstArray为nil,则为newArraynil。可以使用以下方法解决此问题:

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

如果要删除重复项:

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

3
这会要求firstArray成为NSMutableArray吗?
Moshe

4
@Moshe它返回一个新的(不可变的)NSArray对象,并且不更改原始数组,因此在NSArray对象上可以正常工作。
grahamparks 2011年

12
答案可能存在问题,如果firstArray为nil但第二个数组不是,则newArray为nil。

7
当然,然后添加: if (!firstArray) firstArray = @[ ];
Rickster 2014年

1
然后确保仅获得唯一的条目(如果这就是您想要的):NSArray * uniqueEntries = [[NSSet setWithArray:newArray] allObjects];
安德鲁·贝内特

3

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

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

0

对于Swift版本,它的魅力在于:

let a = [1,2,3]
let b = [3,4]
let c = a + b
print(c)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.