Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

  • »MuesliSchuessel« ist der Autor dieses Themas

Beiträge: 25

Beruf: Schüler

  • Private Nachricht senden

1

20.09.2013, 17:56

C# Arrays vergleichen

Hi .
Ich möchte 2 Arrays( a & b ) vergleichen und dann die Elemente die unterschiedlich sind zurück bekommen .
Bisher vergleiche ich nur die Arrays ,ob sie irgendwelche gemeinsamen Elemente haben.

C#-Quelltext

1
a.Intersect(b).Any()

Gibts irgendeine Möglichkeit die Elemente ,die beide Arrays haben "raus zuschmeißen" ,damit ich dann ein Array mit den Elementen habe ,die in dem einem (beispielsweise a) drin sind und im andreren nicht ?
Hoffe ich habe mich nicht zu umständlich ausgedrückt .

mfg

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

2

20.09.2013, 17:59

Ich würde es so machen: Array1 in einer Schleife durchlaufenlassen und jedes Element dann mit jedem aus Array2 vergleichen. Sind diese nicht identisch, dass jeweilige Array-Element in ein neues Array (z.b. Array3) einfügen.

Hab dir mal ne Methode geschrieben:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
public string[] GebeUnterschiede(String[] Array1, String[] Array2)

 {            string[] Array3 = new String[0];

            foreach (String s in Array1) 

 {                foreach (string s2 in Array2)                { 
 if (s.Equals(s2) == false)                    { 
 Array.Resize(Array3, Array3.Length + 2);
 Array3[Array3.Length - 2] = s;
 Array3[Array3.Length - 1] = s; 
 }                }            }
            return Array3;        }

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MitgliedXYZ« (20.09.2013, 18:06)


Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

20.09.2013, 18:00

Vielleicht hilft dir ja Enumerable.Except weiter

  • »MuesliSchuessel« ist der Autor dieses Themas

Beiträge: 25

Beruf: Schüler

  • Private Nachricht senden

4

20.09.2013, 18:02

Ja die Lösung hätte ich im Prinzip auch (Hab ich oben nicht erwähnt ),aber das scheint mir eventuell etwas zu dauern wenn die Arrays zu groß sind ... ?
Gibts da eine Lösung ,bei der ich nicht unbedingt das ganze Array durchlaufen müsste ?

EDIT:
Habe dem Post mit dem Enumerable.Except zu spät gesehen ...
Ich habs jetz so gelöst :

C#-Quelltext

1
2
3
            int[] a = new int[] { 1, 2, 3 };
            int[] b = new int[] { 1, 2, 3, 4};
            int[] c = Enumerable.Except(b, a).ToArray();

Vielen Dank euch :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MuesliSchuessel« (20.09.2013, 18:08)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

21.09.2013, 13:05

Du hast da vielleicht eine falsche Vorstellung. Auch wenn du eine Funktion direkt auf dem Array aufruft, damit sie dir die arbeit abnimmt, muss die Logik dahinter ja trotzdem ausgeführt werden. Das Array muss natürlich komplett durchlaufen werden. Hier geht es also mehr darum, wie du dieses Problem am einfachsten löst. Laufzeit-technisch bringt dir eine Funktion so wie du sie suchst jedoch keinen Vorteil.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

6

21.09.2013, 13:26

Nach Googlen soll Except in fast linearer Laufzeit ablaufen. Das ist schon deutlich besser als GebeUnterschiede und ich selbst wäre auf die schnelle "nur" auf eine Lösung mit in O(n * log n) gekommen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Werbeanzeige