0

こんにちは私はmyarrayとして配列を持っています。最初のサブアレイに参加している「123」としてリストを作成したいと思います。私の文字列は、リストの代わりに私が推測するメモリ位置を出力しています。どんな助けでもありがたいです。

@myarray = [[1,2,3],[4,5,6],[7,8,9]];
for (my $i=0; $i < @myarray; $i++) {
my @firstarray = $myarray[$i];
my $mystring = join("", @firstarray);
print "My string ".$mystring . ". "\n";
}
4

5 に答える 5

4

内部配列参照を。で逆参照する必要があります@{ ... }。また、上部の構造には使用しないでください。[...]通常の括弧を使用してください(角かっこは配列ではなく配列参照を作成します)。printライン上の連結にも問題がありました。

@myarray = ( [1,2,3], [4,5,6], [7,8,9] );
for (my $i=0; $i < @myarray; $i++) {
    my @firstarray = @{ $myarray[$i] };
    my $mystring = join("", @firstarray);
    print "My string " . $mystring . ".\n";
}
于 2013-03-18T20:52:06.480 に答える
4

そのようにモジュールを使用する必要がありData::Dumperます。これは、データ構造の解析方法を知るのに役立ちます。

print Dumper \@myarray; # force passing array as ref
$VAR1 = [
          [
            [
              1,
              2,
              3
            ],
            [
              4,
              5,
              6
            ],
            [
              7,
              8,
              9
            ]
          ]
        ];

しかし、@ シジル(配列) を使用してARRAY refを格納するのは奇妙$です。ほとんどの場合、シジル (スカラー) がその目的で使用されます。(参照Cポインタのようなものです:メモリセルへのアドレス。したがって、それは単純な文字列であり、それを格納するためにスカラ以外のものは必要ありません)

次に、演算子で逆参照する必要があります->

元 :

$ perlconsole
Perl Console 0.4

Perl> my $arrayref = [[1,2,3],[4,5,6],[7,8,9]];

Perl> print join "\n", @{ $arrayref->[2] }
7
8
9
于 2013-03-18T20:48:14.537 に答える
2

あなたは実際に配列の配列の配列を持っています。

  • 外側の配列には、配列への参照という1つの要素があります。
    $myarray[0]
  • その参照配列には3つの要素があり、それぞれが配列への参照です。
    $myarray[0][0..2]
  • これらの参照される配列にはそれぞれ、3つの要素、3つの数値があります。
    $myarray[0][0..2][0..2]

あなたが欲しい

my @aoa = ([1,2,3],[4,5,6],[7,8,9]);
   ^       ^       ^       ^
   |        \------+------/
   |            3 inner
1 outer

$aoa[$i][$j]

for my $inner (@aoa) {
   print(join(', ', @$inner), "\n");
}

また

my $aoa = [[1,2,3],[4,5,6],[7,8,9]];
          ^^       ^       ^
          | \------+------/
          |      3 inner
       1 outer

$aoa->[$i][$j]

for my $inner (@$aoa) {
   print(join(', ', @$inner), "\n");
}
于 2013-03-18T20:52:18.703 に答える
1

配列の初期化方法を変更して、配列()の外側の境界と配列[]の内側に使用されるようにする必要があります。これは、後で処理のためにネイティブの配列形式にキャストする必要がある参照として宣言されることを意味します ( my @subarray = @{$myarray[$i]};)

my @myarray = ([1,2,3], [4,5,6], [7,8,9]);

for (my $i=0; $i < @myarray; $i++) 
{
    my @subarray = @{$myarray[$i]};
    my $subarrayStr = join("", @subarray);
    print $i.". Subarray Str = ".$subarrayStr."\n";
}
于 2013-03-18T21:07:26.500 に答える
0
$myarray = [[1,2,3],[4,5,6],[7,8,9]];
printf "My string %s\n", join(" ", @{$myarray->[0]});

[[1,2,3],[4,5,6],[7,8,9]]リストではなく、リストのリストへの参照を返します。

を に変え@て変数$にします。$myarray

@{$myarray->[0]}最初のサブリストを逆参照し、使用できるリストを返します。

3 つのリストをすべて印刷するには:

$myarray = [[1,2,3],[4,5,6],[7,8,9]];
map{printf "My string %s\n", join(" ",@{$_})} @{$myarray};
于 2013-03-18T21:04:52.400 に答える