Thread 2dimensionale Arrays effizient vergleichen (8 answers)
Opened by Juergen at 2010-07-22 11:41

payx
 2010-07-22 13:10
#140015 #140015
User since
2006-05-04
564 Artikel
BenutzerIn

user image
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)

View full thread 2dimensionale Arrays effizient vergleichen