2009-07-11 9 views
0

Ich habe vier Arrays @A1, @A2, @A3, @A4 jeweils mit der gleichen Anzahl von Elementen, etwa 6. I ein 2-dimensionales Array erstellt werden soll, welche die Werte von zwei Feldelemente speichert Ich möchte ausgegeben folgende Format entspricht. Zum BeispielWie kann ich eine zweidimensionale Matrix erstellen und Informationen von Arrays in Perl einspeisen?

Array1: A B C D E F 
Array2: E F G H I J 
Array3: Q W E R T Y 
Array4: P O L I U G 

die Matrix sollte dann sein:

[0,0] = A E [0,1] = B F [0,2] = C G [0,3] = D H [0,4] = E I [0,5] = F J 
[1,0] = Q P [1,1] = W O [1,2] = E L [1,3] = R I [1,4] = T U [1,5] = Y G 

Ich werde die oben für viele Anzahl von Arrays als nur 4. Also werde ich eine Art Schleife schreiben zu tun.

Irgendwelche Vorschläge, um das Gleiche zu tun?

+1

Diese Frage ist nicht wirklich klar. –

+0

Ich habe die Frage bearbeitet – shubster

Antwort

2

Hoffe das hilft.

use strict; 
use warnings; 

my @A1 = qw'A B C D E F'; 
my @A2 = qw'E F G H I J'; 
my @A3 = qw'Q W E R T Y'; 
my @A4 = qw'P O L I U G'; 

my @matrix; 
$matrix[0][4] = [ $A1[3], $A2[3] ]; 

# Use one of the following 

for(
    my $i=0; 
    $i<@A1 || $i<@A2 || $i<@A3 || $i<@A4; 
    $i++ 
){ 
    $matrix[0][$i+1] = [ $A1[$i], $A2[$i] ]; 
    $matrix[1][$i+1] = [ $A3[$i], $A4[$i] ]; 
} 

# OR 

for(
    my $i=0; 
    $i<@A1 || $i<@A2 || $i<@A3 || $i<@A4; 
    $i++ 
){ 
    push @{ $matrix[0] }, [ $A1[$i], $A2[$i] ]; 
    push @{ $matrix[1] }, [ $A3[$i], $A4[$i] ]; 
} 

# OR 

{ 
    my $i = 1; 
    for my $elem (@A1){ 
    push @{ $matrix[0][$i++] }, $elem; 
    } 
    $i = 1; 
    for my $elem (@A2){ 
    push @{ $matrix[0][$i++] }, $elem; 
    } 
    $i = 1; 
    for my $elem (@A3){ 
    push @{ $matrix[1][$i++] }, $elem; 
    } 
    $i = 1; 
    for my $elem (@A4){ 
    push @{ $matrix[1][$i++] }, $elem; 
    } 
} 
# notice how $i is out of scope here 

zum Ausdrucken Sie Data::Dumper oder YAML

use 5.010; 

use Data::Dumper; 
$Data::Dumper::Terse = 1; 
$Data::Dumper::Indent = 1; 
say Dumper \@matrix; 

use YAML; 
say Dump \@matrix; 

use Data::Dump 'dump'; 
say dump \@matrix; 

Data::Dumper

 
[ 
    [ 
    [ 
     'A', 
     'E' 
    ], 
    [ 
     'B', 
     'F' 
    ], 
    [ 
     'C', 
     'G' 
    ], 
    [ 
     'D', 
     'H' 
    ], 
    [ 
     'E', 
     'I' 
    ], 
    [ 
     'F', 
     'J' 
    ] 
    ], 
    [ 
    [ 
     'Q', 
     'P' 
    ], 
    [ 
     'W', 
     'O' 
    ], 
    [ 
     'E', 
     'L' 
    ], 
    [ 
     'R', 
     'I' 
    ], 
    [ 
     'T', 
     'U' 
    ], 
    [ 
     'Y', 
     'G' 
    ] 
    ] 
] 

YAML

verwenden könnte
 
--- 
- 
    - 
    - A 
    - E 
    - 
    - B 
    - F 
    - 
    - C 
    - G 
    - 
    - D 
    - H 
    - 
    - E 
    - I 
    - 
    - F 
    - J 
- 
    - 
    - Q 
    - P 
    - 
    - W 
    - O 
    - 
    - E 
    - L 
    - 
    - R 
    - I 
    - 
    - T 
    - U 
    - 
    - Y 
    - G 

Data::Dump

 
[ 
    [ 
    ["A", "E"], 
    ["B", "F"], 
    ["C", "G"], 
    ["D", "H"], 
    ["E", "I"], 
    ["F", "J"], 
    ], 
    [ 
    ["Q", "P"], 
    ["W", "O"], 
    ["E", "L"], 
    ["R", "I"], 
    ["T", "U"], 
    ["Y", "G"], 
    ], 
] 
+0

Ich habe die Quest aktualisiert – shubster

+0

@Brad: Wie kann ich die Matrix für jeden Fall ausdrucken? – shubster

+0

Ich habe überprüft und ich habe keine 5.010 Version von Perl auf dem Remote-Server installiert. Wie mache ich das ohne Data :: Dumper Modul? – shubster

0

Meine wilde Vermutung ergibt sich folgende Programm:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Data::Dumper; 

my @a1 = (10 .. 19); 
my @a2 = (20 .. 29); 

my @matrix; 

for (my $i = 0 ; $i < @a1 ; $i++) { 
    push @matrix, [ $a1[$i], $a2[$i] ]; 
} 

print Dumper \@matrix; 
+0

Ich habe die Frage bearbeitet – shubster

Verwandte Themen