C# Problem mit dem HashSet

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.112
Ich habe eine Frage...

Es geht um die Verarbeitung der Dateien. Bei der Verarbeitung geht es um Sekunden, also habe ich mich für HashSet entschieden. Ich lese eine XML Datei ein und speichere jede Zeile in einem HashSet ab.
Das Problem ist, nach dem ersten Durchlauf entfernt der HashSet automatisch aus der Liste alle doppelte Einträge (naja sobald einer gefunden wird, werden die anderen doppelten Einträge einfach entfernt).
Ich weiss, es handelt sich um HashSet, aber trotzdem, kann man verhindern, dass die gleichen Einträge entfernt werden?

MfG

roker002
 
Nein lässt sich nicht verhindern. Das ist ja gerade die wichtige Eigenschaft von einem Set (mathematische Menge). Solltest eventuell über eine Liste nachdenken.
 
Du kannst Listen hinter die Hashes hängen. Ich hab das Mal mit Hashtable gemacht.

D. h. Du speicherst je Eintrag nicht eine Zeile, sondern eine Liste von Zeilen und fügst neue Zeilen immer in die Liste ein.

Es kommt halt auf die Anforderung an, ob das hier sinnvoll ist.

Viele Grüße
Winni
 
Hallo,

ich hab nur mit Java zu tun, aber in C# ists ggf. analog:

HashSet implementiert das Set-Interface. Und dieses erlaubt keine mehrfachen identischen einträge.
Nimm statt dessen HashMap!

MfG
 
Eine HashMap erlaubt auch keine mehrfache Nutzung eines Keys, genau wie ein HashSet. Du kannst allerdings als Value eine Liste nehmen oder einen Counter, der zählt, wie oft eine Zeile vorkam.
 
Du kannst einen Comparer für das HashSet definieren, der die gewünschten Ergebnisse liefert. Oder die Einträge kapseln.

Aber warum ein HashSet? Was wird denn genau gemacht?
 
So wie ich es mir gedacht habe. HashSet ist gut für verschiedene Einträge aber nicht für gleiche.
HashSet wäre für mich interesant, da es performanter ist.
@WinKill dein Vorschlag ist nicht Performat. Vorallem wegen den Speicher.

Habe vorher mit Listen gearbeitet... hab jetzt wieder auf die Listen umgestellt.
Danke an alle für die Diskussion ;)
 
roker002 schrieb:
@WinKill dein Vorschlag ist nicht Performat. Vorallem wegen den Speicher.

Sein Vorschlag ist performant, wenn du viele Lookups machen musst. Aber sobald es darum geht, über alles zu iterieren, sind HashSets und HashMaps sehr langsam, da die Werte intern im Bucket-Prinzip (ein Bucket pro Index, der aus einem Hashwert berechnet wird) gespeichert sind und zum Teil große Lücken dazwischen liegen.
Speicherverbrauch hat so direkt nichts mit Performance zu tun. Oft (nicht immer) besitzen Algorithmen, die mehr Speicher belegen, eine bessere Performance.
 
Zurück
Oben