Wo finde ich Shop-Hash-Tabelle oder Dictionary Key Names
-
19-08-2019 - |
Frage
Wenn ich mit Hash Tables / Wörterbücher arbeite ich manchmal kämpfen mit, wie Schlüssel angeben.
Zum Beispiel: Wenn ich eine einfache Dictionary (mit Python für dieses Beispiel),
foo = {'bar': 'baz', 'foobar': 'foobaz' }
Ich kann Werte zugreifen (in anderen Modulen) mit den Schlüsselwerten. (foo['bar']
) und erhalten baz
zurück
In den Worten von Dr. Evil "ziemlich Standard, wirklich."
Leider mit statischen Strings für Schlüssel fest Paare alle Module dieses Wörterbuch zu deren Umsetzung mit. Natürlich gelten kann dies auch dann, wenn andere Schlüsseltypen (zum Beispiel Aufzählungen, Objekte, etc.); irgendwie, das Sie schneiden Sie es, alle Module, die das Wörterbuch zugreifen müssen die Werte für die Schlüssel kennen.
Um dies zu beheben, ich verwende in der Regel statische konstante Stringwerte (oder Aufzählungen wenn sie in der Sprache) für Schlüssel und entweder speichere sie öffentlich in der lokalen Klasse / Modul oder in einer separaten Modul / Klasse. Daher Änderungen an den Wörterbuchschlüssel selbst in einem einzigen Standort gehalten werden.
Diese Regel sieht wie folgt aus:
BAR_KEY = 'bar'
foo[BAR_KEY] = 'foobar'
Gibt es bessere Möglichkeiten der Schlüssel, so dass die Verwendung des Wörterbuchs nicht unbedingt Paar ein Modul / Klasse zu deren Umsetzung Angabe?
Hinweis: Ich habe ein paar Antworten in SO gesehen, die diese (zB Immobilien-to-Referenz-a-Schlüssel-Wert-Paar-in-a-Wörterbuch ), aber die Themen schienen nicht zu dieses Problem beheben speziell. Die Antworten waren hilfreich, aber ich würde ein breiteres Spektrum an Erfahrung mag.
Lösung
Warum nicht eine Klasse für diese machen, die Eigenschaften nur enthält? Das ist schön mit Python getan (von dem, was ich weiß), und arbeitet gut mit anderen Sprachen auch. die Namen Refactoring ist trivial mit den heutigen Tools auch.
Andere Tipps
In Fällen, in denen ich das Objekt um mich vorbei, und ich kenne Schlüssel bekommt, würde ich immer lieber ein Attribut zu einem Objekt hinzufügen. IMO, der Anwendungsfall von Wörterbüchern ist, wenn Sie nicht wissen, was die Tasten sind.
Python ist trivial:
foo.bar=baz
Java ist so ziemlich das gleiche:
class Foo { public String bar="baz"; }
Die Python-Leistung wäre ziemlich identisch sein, da eine Eigenschaft Lookup nur ein Wörterbuchsuche und die Java-Performance wäre besser.
Ich schaffe manchmal eine separate Klasse, um die Wörterbuchschlüssel zu halten. Das gibt ihnen einen eigenen Namensraum, sowie die regelmäßige Vorteile der Schlüssel in konst Strings sein, nämlich, dass Sie nicht das Risiko von Tippfehler haben, können Sie Code-Vervollständigung erhalten, und der String-Wert ist leicht zu ändern. Wenn Sie nicht über eine eigene Klasse erstellen möchten, erhalten Sie alle Vorteile, außer einem Namensraum nur von const Strings haben.
Das heißt, ich glaube, Sie sind ganz nah dran href="http://thedailywtf.com/articles/soft_coding.aspx" rel="nofollow noreferrer"> soft Codierung Gebiet
Persönlich benutze ich Ihre Methode. Es ist ziemlich vernünftig, einfach und löst das eigentliche Problem.
Normalerweise mache ich das Gleiche; wenn der Schlüssel ist immer das gleiche sein wird, macht ein ‚Konstante statische‘ in welcher Sprache die Schlüssel zu halten.