@{[values %old]}~~@{[values %new]}
2011-05-16T11:44:42 torstenDaher die Frage, kann ich sicher sein, dass bei 2 Hashes mit den selben Keys keys bzw. values das Ergebnis in der selben Reihenfolge liefert?
2011-05-16T11:48:47 pq2011-05-16T11:44:42 torstenDaher die Frage, kann ich sicher sein, dass bei 2 Hashes mit den selben Keys keys bzw. values das Ergebnis in der selben Reihenfolge liefert?
vielleicht kannst du einfach noch ein "sort" davorpacken?
2011-05-16T11:48:47 pq2011-05-16T11:44:42 torstenDaher die Frage, kann ich sicher sein, dass bei 2 Hashes mit den selben Keys keys bzw. values das Ergebnis in der selben Reihenfolge liefert?
vielleicht kannst du einfach noch ein "sort" davorpacken?
1
2
3
my %old=(cc=>undef, x=>"fritz");
my %new=(cc=>"fritz", x=>undef);
print @{[sort values %old]}~~@{[sort values %new]}
1 2 3 4
my @keys_old = sort keys %old; my @keys_new = sort keys %new; say +(@keys_old ~~ @keys_new and @{[@old{@keys_old}]} ~~ @{[@new{@keys_new}]}) ? 'yes' : 'no';
1 2
my @keys = keys %old; if ([@keys] ~~ [keys %new] and [@old{@keys}] ~~ [@new{@keys}])
2011-05-16T12:35:23 pqwozu das doppelt gemoppelte @{[@array{@keys}]}?
2011-05-16T12:35:23 pqsieht auch nicht mehr so eklig aus.
Code (perl): (dl )1 2my @keys = keys %old; if ([@keys] ~~ [keys %new] and [@old{@keys}] ~~ [@new{@keys}])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#!/usr/bin/perl use strict; use warnings; use 5.010; my $keys=[0..100]; my %hash1=hash($keys); my %hash2=hash($keys); print @{[values %hash1]} ~~ @{[values %hash2]}?'OK':'FAIL',"\n"; print @{[map{$hash1{$_}}sort(keys(%hash1))]} ~~ @{[map{$hash2{$_}}sort(keys(%hash2))]}?'OK':'FAIL',"\n"; sub hash { my $ref=shift; for ( reverse(0..$#$ref) ) { my $pos=int(rand(@$ref)); @$ref[$pos,$_]=@$ref[$_,$pos]; } my %l; map{$l{$_}= sprintf('%02u',ord($_))}@$ref; return %l; }
@hash1{sort(keys(%hash1))} ~~ @hash2{sort(keys(%hash2))}
2011-05-16T11:44:42 torstenCode: (dl )@{[values %old]}~~@{[values %new]}
Das funktionierte bei meinen Tests immer. Aber es geht davon aus, dass values die Werte für beide Hashes in der selben Reihenfolge liefert.
%old~~%new and @{[values %old]}~~@{[@new{keys %old}]}
%old~~%new and @{[values %old]}~~@new{keys %old}
2011-05-16T13:11:17 pqaber wozu dereferenzieren? es reicht doch eine arrayref drumherum, oder? also [...] ~~ [...]
das macht ja der operator dann automatisch.
edit: also entsprechend deinem code
%old~~%new and [values %old] ~~ [@new{keys %old}]