Announcement

Collapse
No announcement yet.

"Key-Key-Pair" Collection

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • "Key-Key-Pair" Collection

    Hallo Leute,
    ich suche sowas wie das Dictionary, nur das eben auf der beiden Seite Keys stehen.

    Konkret will ich Statusname und StatusID dort erfassen und mal muss ich über die ID den Namen finden und mal über den Namen die ID.

    Bisher hab ichs im Dictionary gemacht und durchlaufe es in 50% meiner Suchfälle... Finde ich nicht gerade schön.

    Gibts da andere Möglichkeiten?


    Viele Grüße

  • #2
    2 Dictionaries nehmen.

    Comment


    • #3
      Hallo Ralf,
      ja klar... das ging... aber schön ist das auch nicht.
      Du kennst also auch keine solche Collection?

      Grüße

      Comment


      • #4
        Warum nimmst du nicht beide in dein eines Dictionary auf?

        Also für jeden Fall 2 Einträge einmal

        Statusname, StatusID

        und

        StatusID,Statusname
        Christian

        Comment


        • #5
          Stimmt, das wäre auch ne Möglichkeit, dann müsste ich nur das Dictionary von <int, string> auf <object,object> ändern...

          Comment


          • #6
            Hallo Ralf,
            ja klar... das ging... aber schön ist das auch nicht.
            Ein Dictionary liefert dir einen gehashten schnellen Zugriff über den Key auf den Value. Wenn man es auch umgekehrt braucht braucht man einen 2.ten Hash also ein 2.tes Dictionary. Du kannst Dictionary auch durch Hashset ersetzen. Das ändert aber nichts am Grundsätzlichen Prinzip, solange du die Typsicherheit nicht aufgeben willst, das du 2. Hashes bzw. Indizes oder ähnliches brauchst um einen schnellen Zugriff zu bekommen. Insofern sehe ich da kein Problem 2 davon zu nehmen. Wenn du etwas unschön findest dann Kapsel die beiden Dictionaries/Hashsets in einer Klasse und veröffentliche die als ~schönes~ Interface. Das ist in der OO eigentlich immer das Kerngeschäft solche Details entsprechend zu verstecken. Vieles im Framework sieht ja auch nur ~schön~ aus weil du die Details nicht zu sehen bekommst.

            Comment


            • #7
              Hallo Ralf,
              mir ist schon klar für was ein Dictionary/ein Hashtable "eigentlich" genutzt wird.
              Mein ursprüngliche Frage war ja, ob es eine -mir bisher unbekannten- Klasse gibt, dir mir die Programmierarbeit sowas selbst abzubilden (ob jetzt ordentlich gekapselt oder nicht) abnimmt.
              Dass die guten .Net Entwickler am Ende mehr oder minder das gleiche programmiert hätten als ich, ist auch klar. Aber wenn es Standardbibliotheken gibt, sollte man sie ja auch nutzen.
              Natürlich funktioniert das mit 2 Dictionaries. Aber exakt die gleichen Daten doppelt vorzuhalten, nur damit ich einen guten Zugriff über das Dictionary habe find ich auch nicht sooo prikelnd. ;-)

              Comment


              • #8
                Dann kapsele das doch selbst in eine Klasse. Ich meine was Du hast ist ja praktisch nichts anders als 2 mal Key-Value. Wobei eben der Schlüssel zu den Daten unterschiedlich ist.

                Ausserdem hältst Du Deine Daten nicht doppelt, denn ein Dictionary merkt sich die Referenz auf das value objekt und nicht das value objekt selbst. Deswegen hätte ich an dieser Stelle keine Schmerzen 2 Dictionaries dafür anzulegen.
                Wenn Du das allerdings an mehrere Stellen in Deinem Programm brauchst, solltest Du Dir überlegen daraus entweder eine separate Klasse zu machen oder einen vernünftigen Store zu verwenden der auch indizieren kann (sowas wie eine in-memory-DB könnte ich mir vorstellen). Meistens bleibt es nämlich dann nicht bei nur 2 indizen, sondern es sollen auch Suchanfragen usw. erstellt werden.

                Comment


                • #9
                  Hallo fanderlf,
                  gelöst habe ich das Problem ja schon...

                  Noch mal: Mir gings ja eigentlich nur darum mal anzufragen, ob es dafür schon was fertiges von MS gibt oder nicht.

                  Comment


                  • #10
                    Natürlich funktioniert das mit 2 Dictionaries. Aber exakt die gleichen Daten doppelt vorzuhalten, nur damit ich einen guten Zugriff über das Dictionary habe find ich auch nicht sooo prikelnd. ;-)
                    Das würde eine potentiell fertige Klasse aber auch müssen wie ich versucht habe zu erklären. Wenn du 2 schnelle Zugriffe willst brauchst du zwingend, über beide Datenelemente Name und ID, eine Datenstruktur die einen schnellen Zugriff erlaubt und beide Datenstrukturen werden deine Werte(oder Referenzen auf die Werte) enthalten. Eine fertige Klasse die im Prinzip 2 Dictionaries darstellt macht also wenig Sinn da sie leicht selbst zu erstellen ist und weder langsamer noch mehr Speicher verbrauchend ist (außer man implementiert Mist ). Sonst könnte man ja für fast jede Situation Kombinationen vorhandener Klasse einfordern.


                    Die Antwort auf deine Frage ist also 'Nein, gibt es nicht'.


                    Edit: Hier zwei gute Lösungen
                    Zuletzt editiert von Ralf Jansen; 28.12.2011, 18:46.

                    Comment

                    Working...
                    X