Thread 2dimensionale Arrays effizient vergleichen
(8 answers)
Opened by Juergen at 2010-07-22 11:41
Hallo Jürgen, hallo wer,
diese Lösung ist gut, wenn wirklich nach den Positionen im Array vorgegangen werden soll. Ob das gewünscht ist, geht m.E. aus der Problembeschreibung nicht eindeutig hervor. Also, z.B. wenn die Arrays jetzt so aussehen würden: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 my @arr1 = ( ['a', 1, 2, 3], ['b', 4, 4, 3], ['d', 5, 2, 'H'], ); my @arr2 = ( ['a', 1, 2, 3], ['d', 5, 'f', 'H'], ['c', 8, 'r', 9], ); und trotzdem die beiden anonymen Arrays mit dem 'd' an 0-ter Stelle verglichen werden sollten, dann würde es nicht klappen. Das würde dann nach einer Lösung mit Hashes schreien: Code (perl): (dl
)
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 28 29 30 31 #!/usr/bin/perl use strict; use warnings; my %hash1 = ( 'a' => [1, 2, 3], 'b' => [4, 4, 3], 'd' => [5, 2, 'H'], ); my %hash2 = ( 'a' => [1, 2, 3], 'd' => [5, 'f', 'H'], 'c' => [8, 'r', 9], ); for my $schluessel (keys %hash1) { if ($hash2{$schluessel}) { if (join(",", @{$hash1{$schluessel}}) eq join(",", @{$hash2{$schluessel}})) { print "Schluessel $schluessel in beiden ok.\n"; } else { print "Schluessel $schluessel in beiden nicht ok.\n"; } } else { print "Schluessel $schluessel nur in hash1.\n"; } } for my $schluessel (keys %hash2) { unless ($hash1{$schluessel}) { print "Schluessel $schluessel nur in hash2.\n"; } } Zugegeben, der Vergleich der beiden anonymen Arrays in Zeile 18 ist nicht sehr hübsch. HTH, Grüße payx //Edit: Alternative für Zeile 18 (einfacher aber auch nicht wirklich hübsch): Code (perl): (dl
)
if ("@{$hash1{$schluessel}}" eq "@{$hash2{$schluessel}}") { ... } Last edited: 2010-07-22 13:45:33 +0200 (CEST) |