Schrift
[thread]5844[/thread]

Arrays nach Hash: keine Peilung (Seite 2)



<< |< 1 2 3 4 5 >| >> 48 Einträge, 5 Seiten
[E|B]
 2003-10-22 13:23
#66436 #66436
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Quote
Code: (dl )
for my $index (0..$l-1) {


Wieso nimmst du nicht "0..(@Server-1)"?

Quote
Das sieht für mich danach aus, als würdest Du ein AoH brauchen, etwa so:


Was ist das denn?!
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Crian
 2003-10-22 13:26
#66437 #66437
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[E|B
,22.10.2003, 11:23]
Quote
Code: (dl )
for my $index (0..$l-1) {


Wieso nimmst du nicht "0..(@Server-1)"?

Weil ich vorher überprüfe, ob die drei Arrays gleich lang sind, lies doch den Code ;-)

[E|B
,22.10.2003, 11:23]
Quote
Das sieht für mich danach aus, als würdest Du ein AoH brauchen, etwa so:


Was ist das denn?!

Ups, welche Lücken offenbaren sich da?

Ein AoH ist ein Array of Hash, eine sehr oft verwendete Datenstruktur.\n\n

<!--EDIT|Crian|1066814844-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
-Sven-
 2003-10-22 13:40
#66438 #66438
User since
2003-10-15
25 Artikel
BenutzerIn
[default_avatar]
Also die Arrays sind alle gleich lang.

Die Lösung von Crian ist gut. Nur dürfen in dieser Struktur doppelte Servernamen nur einmal auftauchen und doppelte Pfadnamen ebenso.
Crian
 2003-10-22 13:45
#66439 #66439
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Achso, dann möchtest Du kein AoH.

Dann möchtest Du wahrscheinlich einen Hash (Schlüssel = Server), dessen Elemente anonyme Hashes sind (Schlüssel = Pfad, Wert = anonymes Array mit den Dateinamen) ...

Ich bastel mal sowas.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
-Sven-
 2003-10-22 13:50
#66440 #66440
User since
2003-10-15
25 Artikel
BenutzerIn
[default_avatar]
Doch AoH scheint der Weg zur Lösung zu sein. Müssen glaube ich verschachtelte AoH sein.

So:Code
$VAR1 = [
{
[ {'pfad' => 'start', [{'datei' => 'index',
'datei' => 'start',}]
{'pfad'=>'test', 'datei'=>'login'}
'server' => 'google'
}
....
]
Crian
 2003-10-22 13:55
#66441 #66441
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
So...

Code: (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
use strict;

my @Server = qw(google google google web  gmx );
my @Pfad   = qw(start  start  test   mail sms );
my @Datei  = qw(index  start  login  test send);

my $l      = scalar @Server;

die "unterschiedlich große Arrays" if $l != scalar @Server or
                                      $l != scalar @Pfad   or
                                      $l != scalar @Datei  ;


my %Hash = ();

for my $index (0..$l-1) {
    # äußeren Hash-Schlüssel anlegen, Wert ist leeres anonymes Hash:
    $Hash{$Server[$index]} = {};
    # Pfad als Schlüssel eintragen und leeres anonymes Array als Wert:
    $Hash{$Server[$index]}->{$Pfad[$index]} = [];
}

# inneres Array füllen:
for my $index (0..$l-1) {
    push @{ $Hash{$Server[$index]}->{$Pfad[$index]} }, $Datei[$index];
}

use Data::Dumper;

print Dumper \%Hash;


Ausgabe:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$VAR1 = {
         'web' => {
                    'mail' => [
                                'test'
                              ]
                  },
         'google' => {
                       'test' => [
                                   'login'
                                 ],
                       'start' => [
                                    'index',
                                    'start'
                                  ]
                     },
         'gmx' => {
                    'sms' => [
                               'send'
                             ]
                  }
       };


Besser? :-)\n\n

<!--EDIT|Crian|1066817571-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
-Sven-
 2003-10-22 13:56
#66442 #66442
User since
2003-10-15
25 Artikel
BenutzerIn
[default_avatar]
joah geil
Crian
 2003-10-22 13:57
#66443 #66443
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Das könnte man jetzt als HoHoA bezeichnen :-D
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
-Sven-
 2003-10-22 14:14
#66444 #66444
User since
2003-10-15
25 Artikel
BenutzerIn
[default_avatar]
Noch ne kleine Zusatzfrage:

wie kann ich vor 'web' 'google' 'gmx' und den anderen werten die Keys wieder setzen.

Aber ansonsten ist das genau die geile Struktur die ich brauch.
[E|B]
 2003-10-22 14:31
#66445 #66445
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@Crian

Kenne natürlich Array of Hashes. Konnte mir nur unter der Abkürzung nichts vorstellen. *g*
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
<< |< 1 2 3 4 5 >| >> 48 Einträge, 5 Seiten



View all threads created 2003-10-22 11:20.