Laden...

Vergleich von ArrayList und Hashtable

11 Antworten
3,207 Aufrufe
Letzter Beitrag: vor 19 Jahren
Vergleich von ArrayList und Hashtable

Hallo!

Ich habe eine Arraylist in der ich Alben im Format "Interpret - Albumname" speichere.
Dann habe ich einen Hashtable in dem ich Objekte einer benutzerdefinierten Klasse ablege (der Key stimmt mit dem Werten der Arraylist überein)

Also z.B.:
Arraylist: Interpret - Album
Hashtable: Key -> Interpret - Album, Value -> Objekt

Nun möchte ich einen Vergleich fahren und zwar nach NGram Similarity (der Code steht bereits und braucht nicht diskutiert zu werden!)


					for (int i = albumArray.Count - 1; i > -1; i--)
					{
						bestMatch = 0.0F;
						bestMatchIdx = 0;
					
						IDictionaryEnumerator myEnumerator = coverArray.GetEnumerator();
						
						while (myEnumerator.MoveNext())
						{
							Album tmpAlbum = (Album)myEnumerator.Value;
							similarity = ComputeNGramSimilarity(albumArray[i].ToString(), tmpAlbum.AlbumName, 3);
							if (similarity >= bestMatch)
							{
								bestMatch = similarity;
								bestMatchIdx = ????
							}
						}
					}


Wie kann ich mir aber den Index des besten Ergebnisses des Enumerator's merken?
Ich meine, da gibt es ja keinen Index, oder brauche ich den Enumerator in diesem Falle gar nicht?

Ich möchte auf eine Property des Objekts des aktuellen Hashtable-Eintrags zugreifen (boaa, hört sich komplex an 🙂)...

DANKE
atmosfear

Mit IDictionaryEnumerator.Key kommst du an den Key in der HashTable.
Mit HashTable[key] kommst du dann an den Wert der für den key abgespeichert ist.

Der Wert steht aber auch (wie in dem Code oben) in IDictionaryEnumerator.Value.

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

Also ich dachte, dass Value das Objekt liefert (also das Objekt der Klasse), siehe Typecast (Album)
Key müsste dann der "Index" der Hastable sein, verstehe ich das jetzt richtig?

Danke
atmosfear

Wenn ich dich richtig verstanden habe, ja. Nur mit dem Unterschied, dass eine Hashtable keinen "Index" in dem Sinne hat, sondern einen "Schlüssel".
Lieg ich richtig, dass 'coverArray' deine Hashtable ist? Das finde ich perönlich überhaupt nicht gut, das 'Array' zu nennen. Das verwirrt dich und auch alle anderen (wie mich anfangs).

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

@progger
Ja, da hast du recht, das ist definitv verwirrend!
Am Anfang war's ein Array das dann durch eine benutzerdefinierte Klasse zur Hashtable mutiert ist! Ich werd's wohl besser umbenennen...

Ich weiss, eine Hashtable hat keinen Index, ich wusste nur nicht wie ich es sonst nennen sollte - Schlüssel wäre das gesuchte Wort gewesen!

Also das mit dem Enumerator ist in Ordnung, oder?

Danke
atmosfear

Das ist, meiner Meinung nach, die beste und einfachste Möglichkeit eine Hashtable/Dictionary zu durchlaufen und immer BEIDE, Key UND Value, zu haben.

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

Alles klar, vielen Dank!

atmosfear

Hallo atmosfear,

ich würde statt dem Enumerator besser foreach verwenden. Auch statt der for-Schleife würde ich foreach nehmen.

herbivore

foreach nutzt ja implizit einen Enumerator. Ich finde aber, dass man manchmal mit einem Enumerator ein bisschen flexibler ist, nehme sonst aber auch immer foreach her.

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

Vielen Dank euch allen für die wertvolle Unterstützung!

atmosfear