0

4 つの配列@A1, @A2, があり@A3@A4それぞれ同じ数の要素 (たとえば 6) があります。次の形式に対応する出力が必要な 2 つの配列要素の値を格納する 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 つよりも多くの配列に対して実行します。そのため、ある種のループを作成する必要があります。

同じことをすることに関する提案はありますか?

4

2 に答える 2

1

お役に立てれば。

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;

データ::ダンパー

[
  [
    [
      「あ」、
      「え」
    ]、
    [
      'B'、
      「フ」
    ]、
    [
      'C',
      'G'
    ]、
    [
      'D'、
      「ひ」
    ]、
    [
      「え」、
      '私'
    ]、
    [
      'フ'、
      「じ」
    ]
  ]、
  [
    [
      'Q',
      'P'
    ]、
    [
      「わ」、
      「お」
    ]、
    [
      「え」、
      'L'
    ]、
    [
      'R'、
      '私'
    ]、
    [
      'T',
      「う」
    ]、
    [
      「よ」、
      'G'
    ]
  ]
]

YAML

---
-
  -
    - あ
    - え
  -
    -B
    - ファ
  -
    - C
    -G
  -
    - D
    -H
  -
    - え
    - 私
  -
    - ファ
    - J
-
  -
    - Q
    -P
  -
    - W
    - O
  -
    - え
    -L
  -
    - R
    - 私
  -
    - T
    - う
  -
    - あり
    -G

データ::ダンプ

[
  [
    [「A」、「E」]、
    ["B", "F"],
    ["C", "G"],
    [「D」、「H」]、
    [「E」、「私」]、
    ["J F"]、
  ]、
  [
    [「Q」、「P」]、
    [「W」、「O」]、
    [「E」、「L」]、
    [「R」、「私」]、
    [「T」、「U」]、
    [「Y」、「G」]、
  ]、
]
于 2009-07-11T01:31:22.543 に答える
0

私の勝手な推測では、次のプログラムが得られます。

#!/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;
于 2009-07-11T01:36:33.223 に答える