2016-07-12 28 views
1

ich zwei Reihen von zwei verschiedenen Objekten habenUnion der zwei Array von zwei verschiedenen Objekten

Objekt 1:

Class partner { 
    var pImage: String? 
    var pTimeStamp: NSDate? 
    var pTitle: String? 
    var ID: String? 
} 

Objekt 2:

Class customer { 
    var cImage: String? 
    var cTimeStamp: NSDate? 
    var cTitle: String? 
    var ID: String? 
    var isCustomer : Bool? 
} 

Ich möchte Erstellen Sie eine array (in effizienter Weise, natürlich) aus diesen zwei arrayobjects, so dass kein Partner und Kunde Objekt mit dem gleichen ID (cid, pID) innerhalb neuer Array wiederholen sollte. Grundsätzlich Union dieser beiden Array basierend auf IDs. Bitte hilf mir.

EDIT:diese Objekte in Coredata gespeichert und an der Zeit, die ich oben gewünschtes Ergebnis nicht mag, habe ich bereits zwei Array dieses Objekt

+1

Grundsätzlich haben Ihre zwei Klassen fast die gleichen Eigenschaften, warum nicht Erbe verwenden, um dies zu tun? –

+0

@ReinierMelian ok wenn ich eine Basisklasse habe, wie kann mir das helfen? – Suryakant

Antwort

1

Der super-intelligente Weg wäre, um für alles zu machen tun die Arbeit für dich. Weisen Sie diesen Objekten ein gemeinsames Protokoll mit einer ID-Eigenschaft zu. Definieren Sie die Gleichheit für dieses Protokoll mit dem gleichen ID-Wert. Wenn Sie sich jetzt nicht um die Reihenfolge kümmern, zwingen Sie die Arrays zu Sets und verbinden Sie die Sets. Wenn Ihnen die Reihenfolge wichtig ist, müssen Sie stattdessen NSOrderedSet verwenden. Sie können nach dem Ausführen der Vereinigungsoperation zu Array zurückkehren.

Die Alternative (der "dumme" Weg) besteht darin, durch die Arrays zu gehen und ein Wörterbuch zu erstellen, dessen Schlüssel der ID-Wert ist. Wie bei der auf ID-Gleichheit basierenden Gruppe verhindert dies die Wiederholung, die Sie vermeiden möchten. Es ist nicht ineffizient, weil Sie nur einmal durch jedes Array fahren, und das Nachschlagen des Wörterbuchschlüssels ist schnell. Wenn Sie das Wörterbuch erstellt haben, konvertieren Sie es zurück in ein Array. Sie werden jedoch die ursprüngliche Array-Reihenfolge verlieren, wenn Sie keine zusätzlichen Maßnahmen ergreifen.

(Beide Antworten gehen jedoch davon aus, dass Sie Ihre Objekte so ändern möchten, dass sie sogar in einer gemeinsamen Sammlung leben können; aus heutiger Sicht können sie nicht, da es sich um zwei nicht verwandte Typen handelt.)

+0

Ich interessiere mich für Bestellung Ich möchte Kundenobjekt an der Spitze, alle Code-Schnipsel, wenn Sie teilen können – Suryakant

+0

Sie könnten eine einfachere Zeit mit diesem wenn Sie Ihre Objekte ein wenig überdenken können ... – matt

+0

ja richtig kann ich diese Objekte restrukturieren, aber in diesem Stadium des Produkts "Nein" kann ich nicht. – Suryakant