Wie würde ich zwei Arrays in Objective-C kombinieren?

74

Was ist das Objective-C-Äquivalent der JavaScript- concat()Funktion?

Angenommen, beide Objekte sind Arrays, wie würden Sie sie kombinieren?

Moshe
quelle
Es sieht so aus, als würden Sie kalendarische Operationen ausführen. Bitte erwägen Sie, NSCalendarund NSDateComponentsund Freunde zu verwenden, um sie für Sie zu erledigen. Sie sind kein triviales Thema. Berücksichtigen Sie Schaltmonate? Wie wäre es mit Sommerzeit? Was ist mit Schaltsekunden? usw.
Dave DeLong
@ DaveDeLong - Im Moment portiere ich eine kleine Javascript-Bibliothek. Ich werde den Code umgestalten, sobald ich mit dem eigentlichen Umschreiben fertig bin. Mein erstes Ziel ist es, die Informationen in Objective-C abzurufen und später zu optimieren.
Moshe

Antworten:

213

NSArray's entspricht arrayByAddingObjectsFromArray:mehr oder weniger der JavaScript- .concat()Methode:

NSArray *newArray=[firstArray arrayByAddingObjectsFromArray:secondArray];

Hinweis: Wenn firstArrayNull ist, newArrayist Null. Dies kann wie folgt behoben werden:

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

Wenn Sie Duplikate entfernen möchten:

NSArray *uniqueEntries = (NSArray *)[[NSSet setWithArray:newArray] allObjects];
Grahamparks
quelle
3
Würde dies erfordern, ein firstArrayzu sein NSMutableArray?
Moshe
4
@Moshe Gibt ein neues (unveränderliches) NSArray-Objekt zurück und ändert das ursprüngliche Array nicht, sodass es bei NSArray-Objekten einwandfrei funktioniert.
Grahamparks
12
Es gibt ein potenzielles Problem mit der Antwort. Wenn das erste Array Null ist, das zweite Array jedoch nicht, ist das neue Array Null.
Ray
7
Sicher, dann fügen Sie hinzu: if (!firstArray) firstArray = @[ ];
Rickster
1
Stellen Sie dann sicher, dass Sie nur eindeutige Einträge erhalten (wenn Sie dies möchten): NSArray * uniqueEntries = [[NSSet setWithArray: newArray] allObjects];
Andrew Bennett
3

Hier ist eine symmetrische und einfache Möglichkeit, indem Sie mit einem leeren Array beginnen:

NSArray* newArray = @[];
newArray = [newArray arrayByAddingObjectsFromArray:firstArray];
newArray = [newArray arrayByAddingObjectsFromArray:secondArray];
Sinn-Angelegenheiten
quelle
0

Für die Swift-Version ist es wie ein Charme:

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