Bevor wir uns näher mit dem Konvertierungsprozess befassen, sollten wir zunächst den Unterschied zwischen Hash und Struct herausfinden. Dies wird uns helfen, die Frage zu beantworten, warum einige lieber struct als hash in Ruby verwenden.
Unterscheidung zwischen Hash und Struct
Ein Hash ist eine Sammlung von Schlüssel-Wert-Paaren und entspricht einem Array, mit der Ausnahme, dass die Indizierung über die beliebigen Schlüssel beliebiger Objekttypen erfolgt (nicht über den Integer-Index). Die Reihenfolge, in der ein Hash nach Wert oder Schlüssel durchlaufen wird, kann willkürlich erscheinen - und muss im Allgemeinen nicht in der Schnittreihenfolge sein. Auf der anderen Seite ist struct die bequemere Art, die Anzahl der Attribute zu bündeln. Dies geschieht durch die Zugriffsmethoden, ohne dass man explizite Klassen schreiben muss.
Struct ermöglicht es, eine Instanz mit einer Reihe von Zugriffsmöglichkeiten zu erzeugen, was für den Benutzer mächtig und praktisch erscheint. Obwohl Hash ähnliches leisten kann, birgt es einige Fallstricke, die Sie vielleicht nicht mögen. Struct ist einfacher zu verstehen, was die Benutzer zu einer besser wartbaren Kodierung führt. Darüber hinaus ist es erwähnenswert, dass struct dem Hash überlegen ist, wenn es um die Geschwindigkeit des Datenabrufs geht, was Sie wissen lässt, dass struct im Vergleich zum Hash die bessere Wahl für die Konfiguration sein kann, auf die in wiederholter Weise zur Laufzeit zugegriffen werden muss.
Umwandlung von Hash in Struct in Ruby
Angesichts der Tatsache, dass wir die beiden kennen, werden viele vielleicht lieber struct als hash verwenden. Aber wir wollen uns hier darauf konzentrieren, dass hinter der geringen Leistung von Hashs immer noch Vorteile liegen können. Wenn Sie es nicht auf seine eigene kleine Weise verwenden können, dann konvertieren Sie es in struct, so dass eine bessere Nutzbarkeit erreicht werden kann.
Wenn Sie die Struktur bereits definiert haben und die Konvertierung von has in struct einleiten wollen, können wir Ihnen mit den folgenden Methoden in einem gegebenen Beispiel weiterhelfen. Wenn Sie Hash in eine Struktur in Ruby konvertieren wollen, sagen wir zum Beispiel, wir haben ein gegebenes of:
h = { :a => 1, :b => 2 }
und eine Struktur wie folgt haben wollen:
s.a == 1
s.b == 2
Für die Umwandlung können Sie eine der folgenden Methoden anwenden:
Umrechnung Methode 1:
Bei dieser Methode wird das Ergebnis als OpenStruct und nicht speziell als struct angezeigt:
pry(main)> require 'ostruct'
pry(main)> s = OpenStruct.new(h)
=> #
pry(main)> setzt s.a, s.b
1
2
Umrechnung Methode 2:
Wenn Sie bereits eine struct definiert haben und etwas mit einer Raute beginnen wollen, können Sie dies tun:
Person = Struct.new(:vor_name, :nach_name, :alter)
person_hash = { vor_name: "Foo", nach_name: "Bar", alter: 29 }
person = Person.new(*person_hash.values_at(*Person.members))
=> #
Umrechnungsmethode 3:
Da die Reihenfolge der Hash-Schlüssel in Ruby 1.9+ garantiert wurde, können Sie dies befolgen:
s = Struct.new(*(k = h.keys)).new(*h.values_at(*k))
Das Beispiel für die Umwandlung von Hash in Struct kann Ihnen helfen, aber wenn Sie eine umfassendere Idee haben möchten, sollten Sie sich an Fachleute wenden, um formale Unterstützung zu erhalten.