Hallo,
ich hab folgendes Problem. Ich hab zwei String arrays und wollte ueberprufen ob ein wert auch in dem anderen enthalten ist.
Bsp:
string[] ar1 = new string[] { "a", "b", "c", "d", "e", "f", "g" };
string[] ar2 = new string[] { "a", "b", "i", "d", "e", "f", "g" };
Mein string sind genau wie in deisem Beispiel leicht "vorsortiert" d.h. sie sind nicht sortiert, aber ich wuerde sagen zu 80% trifft es zu.
Was genau zu trifft ist einfach, dass das ar1_ sehr wahrscheinlich ar2_ ist.
Wenn ich nun bei ar2[4] bin macht es also wenig Sinn bei ar1[0] mit dem vergleichen zu starten.
Es waere sehr viel sinnvoller evtl. erst den vergleich ar1_ == ar2_ anzustellen und dann im array "nach hinten" weiter zu laufen.
Gibt es da evtl. eine bessere methode oder klingt das sinnvoll?
Ich habe leider gar keine erfahrung in sachen sortieren und habe es bisher mit zwei forschleifen gemacht.
Da es aber ca. 2 * 3000 arrays sind mit mindestens 100 elementen ist das sehr aufwendig und dauert lange.
Ich freu mich ueber jede idee und Anregung.
Und noch eine kleine frage. Wie kann ich den Quelltext von String.Contain() einsehen ?
Danke Tschebbe
Hallo,
gehts dir darum zu prüfen ob ein Element im Array auch im anderen ist oder gehts um Sortierung (das kann ich irgendwie zwischen den Zeilen lesen).
Dies unterscheidet nämlich die weitere Vorgehensweise.
Wie kann ich den Quelltext von String.Contain() einsehen ?
Mit dem Reflektor.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo Tschebbe,
naja, halbwegs sortiert bringt vermutlich nicht mehr als gar nicht sortiert. Um schnell vergleichen zu können, sollten die Array vor dem Vergleich vollständig sortiert sein.
herbivore
@gfoidl ich will nur wissen ob das element im anderen array vorhanden ist oder nicht.
@herbivore ok, aber es macht ja sicher keinen sinn sie vorher zu sortieren oder?
Hallo,
dann könntest du ein **HashSet **verwenden und mit Contains prüfen - ist ein O(1)-Vorgang.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo Tschebbe,
es macht ja sicher keinen sinn sie vorher zu sortieren oder?
kommt darauf an, was genau du willst. Wenn du pro Array für nur ein Element wissen willst, ob es enthalten ist, dann bringt sortieren nichts. Dann hast du überhaupt schlechte Karten. Dann bringt der HashSet-Vorschlag auch nur dann was, wenn du gar nicht erst Arrays, sondern gleich HashSets verwendest. Wenn du aber pro Array für hundert Elemente wissen willst, ob die enthalten sind, wird sortieren oder HashSet verwenden schon was bringen.
herbivore
also in meinem fall will ich quasi wissen, welche Element in dem einen array enthalten sind und nicht in dem anderen und genau das selbe fuer das andere array.
d.h. ich suche die element die nur in einem der beiden arrays vorkommen.
ich bemerke gerade, dass in meinem beispiel ein fehler ist und zwar koennen die arrays unterschiedlich viele elemente haben.
Sortieren bringt das dann noch was? Weil die element stehen dann ja sehr wahrscheinlich an unterschiedlicher stelle.
Schau dir dochmal die dafür entsprechenden LINQ-Methoden an.
Intersect() wäre z.B. eine Methode, die deinen Anforderungen entspricht.
mit freundlichen Grüßen,
Tomot
Projekte: www.gesellschaftsspieler-gesucht.de
@Tschebbe:
Das ist jetzt eine leicht andere Aufgabe als in der Eingangsfrage 😉
Es handelt sich somit um Mengenoperationen. In .net ist dafür das HashSet geschaffen worden - wie bereits oben erwähnt. Verwende dieses anstatt der Arrays denn das HS besitzt sehr effiziente Methode für solche Aufgaben.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
mh... das ist natuerlich eine feine art. ok. kannte ich gar nicht... das haette mir evtl. viel code erstpart 😉
ich werde das mal einbauen und mal schauen ob es dann besser/schneller geht.
danke mal.