[英]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.