Thread Löschen von Hash Elementen-Paar in foreach-Schleife (9 answers)
Opened by yippi at 2014-01-21 01:39

payx
 2014-01-21 09:58
#173090 #173090
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo yippi,

statt delete müsstest Du undef schreiben.

Dieser Ansatz ist aber schlecht, weil Du so innerhalb der for-Schleife (in Perl dasselbe wie foreach) die Menge der Elemente modifizierst, über die die Schleife läuft.

Wenn Du strict und warnings gebrauchst, was Du in der Tat immer tun solltest, wenn Du mehr als einen Einzeiler schreibst, siehst Du das Gemecker.

Eine einfache Art, value-Dubletten aus einem Hash zu eliminieren (und das scheint mir Dein Bestreben zu sein), ist den Hash herumzudrehen, also (vorübergehend) die Werte zu Schlüsseln zu machen und umgekehrt, denn jeder Schlüssel darf in einem Hash nur einmal vorkommen.
Code (perl): (dl )
1
2
my %hash_reversed = reverse %hash;
%hash = reverse %hash_reversed;

Anmerkung: Das funktioniert nicht mit (scheinbar, also inhaltlich) gleichen anonymen Hash- oder Arrayrefs als Werten, denn es werden verschiedene Referenzen erzeugt, d.h. diese beiden Einträge würden den Vorgang beide überleben:
Code (perl): (dl )
1
2
$hash{ee}={1,2,3,4};
$hash{ff}={1,2,3,4};

Ich hoffe, es war etwas dabei, was Dich weiterbringt.

Grüße
payx

Editiert von payx: Edit: Falsche Aussage gestrichen (siehe nachfolgende Diskussion)
Last edited: 2014-01-21 15:50:49 +0100 (CET)

View full thread Löschen von Hash Elementen-Paar in foreach-Schleife