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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top