Laden...

ueberprufen ob ein array ein element enthaelt

Erstellt von Tschebbe vor 14 Jahren Letzter Beitrag vor 14 Jahren 951 Views
T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren
ueberprufen ob ein array ein element enthaelt

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

6.911 Beiträge seit 2009
vor 14 Jahren

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!"

49.485 Beiträge seit 2005
vor 14 Jahren

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

T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren

@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?

6.911 Beiträge seit 2009
vor 14 Jahren

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!"

49.485 Beiträge seit 2005
vor 14 Jahren

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

T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren

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.

691 Beiträge seit 2007
vor 14 Jahren

Schau dir dochmal die dafür entsprechenden LINQ-Methoden an.

Enumerable Methods

Intersect() wäre z.B. eine Methode, die deinen Anforderungen entspricht.

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

6.911 Beiträge seit 2009
vor 14 Jahren

@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!"

T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren

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.