Gewusst wie: einfügen von hash-in-hash in Perl
Habe ich eine einfache hash irgendwo definiert in der main-Datei
our %translations = (
"phrase 1" => "translation 1",
# ... and so on
);
In einer anderen Datei möchte ich hinzufügen, einige weitere übersetzungen. Das heißt, ich will etwas wie das hier tun:
push our %translations, (
"phrase N" => "blah-blah",
# ....
"phrase M" => "something",
);
Natürlich ist dieser code nicht funktionieren würde: push
funktioniert nicht mit hashes. Also meine Frage ist: was ist eine einfache und elegante Möglichkeit zum einfügen eines hash-Werte in einem vorhandenen hash?
Ich würde nicht wollen, zu greifen, zu
$translations{"phrase N"} = "blah-blah";
# ....
$translations{"phrase M"} = "something";
da in Perl und man sollte in der Lage sein, Dinge zu tun, ohne zu viel Wiederholung im code...
InformationsquelleAutor Pasha | 2011-09-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie zuweisen, um einen hash-slice mit der Schlüssel und Werte Funktionen. So lange, wie der hash nicht geändert werden, zwischen die Anrufe, die
keys
Rückkehr der Tasten in der gleichen Reihenfolge, dassvalues
gibt die Werte.@translations{keys %$_} = values $%_ for {"phrase N" => "blah-blah", ...};
Diese syntax kam nicht zu mir, aber es ist eine clevere Abkürzung. Die Schleife macht es wohl ein bisschen weniger effizient, aber ich bezweifle, dass der Unterschied messbar ist.
gut, es ist eine Schleife über ein einzelnes element. Mehr von eine bequeme Art und Weise weisen die anonymen hash, um die $ _ - variable.
InformationsquelleAutor cjm
%translations
InformationsquelleAutor Tudor Constantin
Können Sie zuweisen, um einen hash-slice:
oder mit Daten aus einer anderen hash:
Sie können arrays für die Schlüssel und Werte (siehe update)
InformationsquelleAutor Eugene Yarmash
%translations
enthält mehrere tausend Einträge bereits. Würden Sie die Lösung erstellen Sie ein temp-hash ("Satz N"=>..., "Satz M"=>..., <eine Kopie der original - %übersetzungen>), und weisen Sie dann dieses temporären hash %übersetzungen? Wenn ja, dann wird es einen erheblichen Aufwand für den Einsatz dieser Methode, wenn nicht, dann scheint es einfach genug!ja, tut es. Eine neue Liste Wert ist konstruiert aus diesen Teillisten zugeordnet
%translations
InformationsquelleAutor Karoly Horvath
Hash::Merge
ist eine weitere option: https://metacpan.org/module/Hash::Mergealso - Mach dir keine sorgen Sie zu viel über Optimierung im kopieren-hashes - wenn es zu einem problem, schauen Sie in es dann. Einfach mal ausprobieren und schreiben gut klar lesbaren und wartbaren code. Ein hash-Wert mehrere tausend Schlüssel mit string-Werte ist nicht groß!
was du noch nicht angegeben, in Ihrer Frage, ist, ob es zu einer Kollision von Schlüsseln (d.h. Sie könnte es jemals werden zwei " Satz 1 ist zu Lesen von den Dateien...?
ich Stimme zu, es ist in diesem Fall aber nützlich zu wissen, die Existenz, so dachte, ich würde erwähnen möchte.
InformationsquelleAutor plusplus