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.
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).
@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.
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.
Vielen Dank euch allen für die wertvolle Unterstützung!
atmosfear