Vergleichen Sie zwei Arrays unterschiedlicher Länge und zeigen Sie Unterschiede

8

Problem:
Ich habe zwei Arrays, die möglicherweise unterschiedliche Längen haben können. Ich muss beide Arrays durchlaufen und Ähnlichkeiten, Zusätze und Löschungen finden.

Was ist der schnellste und effizienteste Weg, dies in C # zu erreichen?

Bearbeiten: Die Arrays sind vorsortiert und können zwischen 50 und 100 Elemente enthalten. Außerdem gibt es keine Beschränkungen hinsichtlich der Geschwindigkeit und / oder der Speicherbelegung (jedoch mag niemand ein Speicher-Schwein;)

Zum Beispiel:

%Vor%

AND

%Vor%

Unterschiede:

(in Bezug auf das Array Foo_New)

%Vor%

(in Bezug auf das Array Bar_New)

%Vor%     
Sean 21.06.2009, 02:01
quelle

4 Antworten

15

Sie können außer und Überschneiden ...

%Vor%     
JP Alioto 21.06.2009, 02:13
quelle
3

Ich ging voraus und handkodiert einen und benutze das Beispiel in der akzeptierten Antwort, und der handcodierte geht ein wenig besser. Ich habe es gehandhabt, meine Saiten etwas anders auszugeben. Andere Faktoren, die berücksichtigt werden müssen, sind, ob das Ausgenommen eine sortierte Kopie des Arrays macht (da es nicht davon ausgehen kann, dass es sortiert ist) oder ob es eine Art Hash oder eine lineare Suche macht (es ist tatsächlich auf IEnumerable beschränkt - für sehr große Arrays, die bereits sortiert sind) , das könnte ein Problem sein). Du könntest meinen ändern, um IEnumerable (was allgemeiner ist) anstelle von IComparable [] zu vergleichen.

%Vor%     
Cade Roux 21.06.2009 02:47
quelle
1

Ich schrieb dies eine Weile zurück:

Verwendung:

%Vor%

Implementierung:

%Vor%     
Sam Saffron 21.06.2009 02:24
quelle
1

Da Ihre Arrays sortiert sind, sollten Sie in der Lage sein, die Arrays gleichzeitig zu durchlaufen und in einem Durchgang zu bestimmen, ob sich jedes Element im anderen Array befindet. (Ähnlich dem Zusammenführungsschritt in Zusammenführungssortierung.) Sie können ein Beispiel davon unten sehen:

%Vor%

Alternativ müssen Sie ein Array durchlaufen und für jedes Element in diesem Array einen einzigen Durchgang des anderen Arrays durchführen, um nach einer Übereinstimmung zu suchen.

Edit: JP hat einen guten Vorschlag, wie man dies mit dem Framework tun kann. Obwohl die Arrays sortiert sind, liegt der Vorteil meines Ansatzes darin, dass Sie nur einen Durchlauf durchführen müssen, um alle Ergebnisse zu finden. Sie müssten nicht drei Pässe machen.

    
Rob Rolnick 21.06.2009 02:11
quelle

Tags und Links