Ich habe einen Zustand, in dem ich einen Hash bekomme
hash = {"_id"=>"4de7140772f8be03da000018", .....}
und ich will diesen Hash als
hash = {"id"=>"4de7140772f8be03da000018", ......}
PS : Ich weiß nicht, was die Schlüssel im Hash sind, sie sind zufällig und haben ein "_" -Präfix für jeden Schlüssel und ich möchte keine Unterstriche
ruby-on-rails
ruby
ruby-on-rails-3
hash
Manish Das
quelle
quelle
_id
Schlüsselid
in einem Array von MongoDB-Dokumenten umAntworten:
quelle
hash.delete :old_key
Rückgabe abrufen. Beim Löschen wird der alte Schlüssel verwendet. WOW, ich möchte, dass es irgendwo tätowiert wird :-D DankeSchienen Hash hat Standardmethode dafür:
http://api.rubyonrails.org/classes/Hash.html#method-i-transform_keys
UPD: Ruby 2.5-Methode
quelle
Wenn alle Schlüssel Zeichenfolgen sind und alle das Unterstrichpräfix haben, können Sie den Hash wie folgt patchen:
Das
k[1, k.length - 1]
Bit erfasst allek
außer dem ersten Zeichen. Wenn Sie eine Kopie wünschen, dann:Oder
Sie können auch verwenden,
sub
wenn Ihnen diek[]
Notation zum Extrahieren eines Teilstrings nicht gefällt :Und wenn nur einige der Schlüssel das Unterstrichpräfix haben:
Ähnliche Änderungen können an allen anderen oben genannten Varianten vorgenommen werden, außer diesen beiden:
sollte mit Schlüsseln in Ordnung sein, die keine Unterstrichpräfixe ohne zusätzliche Änderungen haben.
quelle
du kannst tun
Dies sollte für Ihren Fall funktionieren!
quelle
Wenn wir einen bestimmten Schlüssel in Hash umbenennen möchten, können wir dies wie folgt tun:
Angenommen, mein Hash ist
my_hash = {'test' => 'ruby hash demo'}
Jetzt möchte ich 'Test' durch 'Nachricht' ersetzen, dann:
my_hash['message'] = my_hash.delete('test')
quelle
hash[:new_key] = has[:old_key]
:, sondern:hash[:dynamic_key] = hash[:_dynamic_key]
Es war eine klare Frage zu Regex und kein einfacher Hash-Ersatz.quelle
quelle
Ich habe übertrieben und mir folgendes ausgedacht. Meine Motivation dahinter war, an Hash-Schlüssel anzuhängen, um Bereichskonflikte beim Zusammenführen / Reduzieren von Hashes zu vermeiden.
Beispiele
Hash-Klasse erweitern
Fügt Hash-Instanzen eine Rekey-Methode hinzu.
Beispiel voranstellen
Trimmbeispiel
Abflachen und Anhängen eines "Bereichs"
Wenn Sie einen Hash an rekey zurückgeben, wird der Hash zusammengeführt, wodurch Sie Sammlungen reduzieren können. Auf diese Weise können wir unseren Schlüsseln beim Reduzieren eines Hashs einen Bereich hinzufügen, um ein Überschreiben eines Schlüssels beim Zusammenführen zu vermeiden.
quelle
Frühere Antworten sind gut genug, können jedoch die Originaldaten aktualisieren. Falls Sie nicht möchten, dass die Originaldaten betroffen sind, können Sie meinen Code ausprobieren.
Zuerst wird der Schlüssel '_id' ignoriert und dann mit dem aktualisierten zusammengeführt.
quelle