簡體   English   中英

如何在Perl中訪問數組數組?

[英]How do I access arrays of array in perl?

嗨,我有一個數組作為myarray。 我想列出一個“ 1 2 3”,該列表正在連接第一個子數組。 我的字符串正在打印我假定的存儲位置,而不是列表。 任何幫助將不勝感激。

@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";
}

這樣,您應該使用Data::Dumper模塊,這將幫助您了解如何解析數據結構:

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

但是使用@ sigil (數組)存儲ARRAY引用很奇怪,為此,大多數時候使用$ sigil(標量)。 引用就像一個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

您必須通過@{ ... }取消引用內部數組引用。 此外,不使用[...]的頂部結構-使用普通括號(方括號創建一個數組引用,而不是陣列)。 您的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";
}

您實際上有一個數組array of array。

  • 外部數組具有一個元素,即對數組的引用。
    $myarray[0]
  • 引用的數組具有三個元素,每個元素都是對數組的引用。
    $myarray[0][0..2]
  • 這些引用數組中的每一個都有三個元素,三個數字。
    $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");
}

您需要更改數組的初始化方式,以便將()用於外部數組邊界,將[]用於內部數組,這意味着它們被聲明為引用,以后需要轉換為它們的本機數組格式進行處理( 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";
}
$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]}將取消引用第一個子列表,並返回您可以使用的列表。

要打印所有三個列表:

$myarray = [[1,2,3],[4,5,6],[7,8,9]];
map{printf "My string %s\n", join(" ",@{$_})} @{$myarray};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM