Как создать двумерную матрицу и передавать информацию из массивов в Perl? - PullRequest
0 голосов
/ 11 июля 2009

У меня есть четыре массива @A1, @A2, @A3, @A4 каждый с одинаковым количеством элементов, скажем, 6. Я хочу создать 2-мерный массив, который хранит значения двух элементов массива Я хочу вывод, соответствующий следующему формату. Например

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

Тогда Матрица должна быть:

[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

Я буду делать выше для большого количества массивов, чем просто 4. Поэтому мне придется написать какой-то цикл.

Есть ли какие-либо предложения о том же?

Ответы [ 2 ]

2 голосов
/ 11 июля 2009

Надеюсь, это поможет.

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

Для распечатки вы можете использовать Data :: Dumper или 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

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

Данные :: 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 голосов
/ 11 июля 2009

Моя дикая догадка дает следующую программу:

#!/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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...