Meine Datenstruktur istPerl Art Hash von Hashes von der Third-Level-Taste und vergleichen es
my %hash = (
firstkey => {
secondkey => {
2 => ['9','2'],
1 => ['3','4'],
3 => ['8','2']
}
}
);
print Dumper \%hash;
ich den Hash durch die drittens Schlüssel sortieren möchten. d.h. 1
, 2
und 3
in diesem Fall und dann das zweite Element (index[1]
) im Array vergleichen. Wenn sie gleich sind, und drucken Sie es dann aus.
Erwartet Sortiert Hash:
my %hash = (
firstkey => {
secondkey => {
1 => ['3','4'],
2 => ['9','2'],
3 => ['8','2']
}
}
);
print Dumper \%hash;
Nach Art der Hash vergleichen wir die index[1]
des ersten Array [3,4]
mit dem zweiten Array [9,2]
. 4
ist nicht gleich 2
, also werden wir nichts drucken.
Dann vergleichen wir die index[1]
des zweiten Array [9,2]
mit dem dritten Array [4,2]
. 2
gleich 2
, dann werden wir alle den Inhalt davon
firstkey, secondkey, 3, [8,2]
wir nur die benachbarten Array vergleichen müssen drucken.
Ich lese viele Lösungen über das Sortieren des Hash, aber ich konnte keine Lösung finden, die es wirklich neu anordnet Ist es eine Möglichkeit, den Hash durch den Schlüssel neu anzuordnen und einen Hash mit der neuen Reihenfolge in Perl zu erstellen? Oder wir können den Hash nur mit der for-Schleife sortieren und in der for-Schleife vergleichen?
Sie können nicht "_sort hash_" - sie sind intrinsisch ungeordnet. Aber Sie können eine sortierte Liste von Schlüsseln erhalten, indem Sie 'sort' auf der Liste der Hash-Schlüssel mit beliebigen Kriterien verwenden. Dann haben Sie eine _ordered_ Liste von Schlüsseln, die Sie durchlaufen müssen, damit Sie Ihren Hash "sortiert" verwenden können. Sehen Sie [diesen Beitrag] (https://stackoverflow.com/a/45338396/4653379) zum Sortieren eines ähnlichen Hashs oder [diesen Beitrag] (https://stackoverflow.com/a/45928281/4653379) für ein bisschen mehr involvierte Art mit einigen Kommentaren. Es gibt viel mehr da draußen. – zdim
@ zdim Vielen Dank für Ihre Vorschläge. Ich versuche es. – Luke
Während der obige Kommentar im Allgemeinen gut und notwendig ist, und es wert ist, durchzugehen, kann es in diesem Problem nicht helfen (und könnte so irreführend sein) - ich habe eine Antwort geschrieben. – zdim