brauche sowas ähnliches wie Dictionary!!! Hilfe
-
Hy,
ich habe ein Problem:
ich habe ID's und Values. Das hab ich in nem Dictionary gespeichert. Jetzt muss ich aber von einem Value auf die ID kommen, und das geht mit Dictionary iregendwie nich. Kennt jemand ne Möglichkeit?
Helft bitte schnell, und Danke schon mal.
-
Entweder du suchst in dem Dictionary alle Daten durch und vergleichst den Inhalt oder aber wenn es sowohl auf Ids als auch Values schnell zugreifen soll, dann legst du halt ein 2. Dictionary (Value, Id) an (wenn sich die Values auch alle unterscheiden).
-
tja, das is das Problem: Es soll schnell gehen (Schleife nicht so toll) und die values sind nicht alle verschieden!
-
speichere in jedem value-objekt seine id.
-
Jetzt steh ich aufm Schlauch. Was meinstn damit?
-
aah, ich glaub ich habs: Du meinst ich soll einfach die Werte vertauschen: statt <Key,Value> mach ich <Value,Key> ? Wenn ja, dann geht das auch nich, da ich mehrere gleiche Values hab und wenn ich die als Keys nehme, dann gibts ne Exception wegen 'mehrere gleiche Keys'
-
Wenn du z.B. hast:
Dictionary<IDDatentyp,MeinTollesObjekt> blupp=new ...
packst du einfach an MeinTollesObjekt eine Eigenschaft MeinTollesObjekt.id und befüllst die.
-
mmh, also iwie raff ichs nich.
HIer ein Ausschnitt meines Codes:
Dictionary<Guid, string> dict = new Dictionary<Guid, string>();
Und nun hab ich string s="blabla" und will den zugehörigen Key dazu haben. Wo muss ich da das .id einbauen und mit welchem Objekt?
-
wenn strings mehrfach vorkommen, welche id willst du dann haben? einfach nur die erste? alle?
laufe in einer schleife über den gesamten inhalt des dicitionaries und vergleiche value mit dem gesuchten string.
ich kann kein c#. in c++ wäre es so:
for(std::map<Guid, std::string>::const_iterator i = dict.begin(); i != dict.end(); ++i) { if(i->second == gesuchter_string) { // i->second ist das erste element mit value == gesuchter_string break; // break kann weggelassen werden, wenn es um *alle* passenden elemente geht } }
dürfte in c# so ähnlich gehen.
-
Die Guid ist eine Eindeutige zuordnung auf einen String. Wenn der String mehrfach vorkommt kannst Du unmöglich von diesem String auf die dazugehörige GUI zurück schliessen. Dein System muss also irgendwelche Einschränkungen oder Kompromisse machen.
Ohne diese Eischränkung zu wissen kann man hier viele vorschläge machen (z.B. das zweite Dict mit <string,List<GUID>> zu füttern) aber weiter wird Dich das nicht bringen.
-
Mir kommt die Problematik auch ziemlich verkorkst vor (mit anderen Worten: Fehldesign!) aber wenn's das wirklich sein sollte, kannst Du folgendes versuchen:
// Am Anfang der Datei: using Pair = System.Collections.Generic.KeyValuePair<System.GUID, string>; Dictionary<GUID, Pair> dict = new Dictionary<GUID, Pair>(); dict.Add(guid, new Pair(guid, "Text");