Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在perl中访问数组的数组?_Arrays_Perl_Join_Multidimensional Array_Perl Data Structures - Fatal编程技术网

Arrays 如何在perl中访问数组的数组?

Arrays 如何在perl中访问数组的数组?,arrays,perl,join,multidimensional-array,perl-data-structures,Arrays,Perl,Join,Multidimensional Array,Perl Data Structures,嗨,我有一个数组作为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 ".$mystr

嗨,我有一个数组作为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";
}
@myarray=[[1,2,3]、[4,5,6]、[7,8,9];
对于(my$i=0;$i<@myarray;$i++){
my@firstarray=$myarray[$i];
我的$mystring=join(“,@firstarray”);
打印“我的字符串”。$mystring.“\n”;
}

您应该使用
Data::Dumper
模块,这样可以帮助您了解如何解析数据结构:

print Dumper \@myarray; # force passing array as ref
$VAR1 = [
          [
            [
              1,
              2,
              3
            ],
            [
              4,
              5,
              6
            ],
            [
              7,
              8,
              9
            ]
          ]
        ];
但是使用
@
(数组)来存储数组引用是很奇怪的,大多数情况下都会使用
$
符号(标量)(引用就像
C
指针:指向内存单元的地址。因此它是一个简单的字符串,不需要标量以外的东西来存储它)

然后,需要使用
->
操作符取消引用

例:


您必须通过
@{…}
取消对内部数组引用的引用。另外,不要对顶部结构使用
[…]
-使用普通括号(方括号创建数组引用,而不是数组)。在
打印
行上的连接也有问题:

@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";
}
@myarray=([1,2,3],[4,5,6],[7,8,9]);
对于(my$i=0;$i<@myarray;$i++){
my@firstarray=@{$myarray[$i]};
我的$mystring=join(“,@firstarray”);
打印“我的字符串”。$mystring.。\n”;
}

实际上,您有一个数组的数组

  • 外部数组有一个元素,即对数组的引用。
    $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");
}

[[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};

您需要更改初始化数组的方式,以便外部数组边界使用
()
,内部数组使用
[]
,这意味着它们被声明为引用,以后需要转换为其本机数组格式进行处理(
my@subarray=@{$myarray[$i]};

my@myarray=([1,2,3],[4,5,6],[7,8,9]);
对于(my$i=0;$i<@myarray;$i++)
{
my@subarray=@{$myarray[$i]};
my$subarray str=join(“,@subarray”);
打印$i.“.Subarray Str=“.Subarray Str.”\n”;
}

为什么是“数组的数组”?我看到一个外部数组或三个内部一维数组arrays@amphibient,因为一个数组的元素引用了一个数组的元素引用了3个数组。这是5个数组,而不是4个。如我所示,计算
my@
[]
。记住
[…]
基本上是
do{my@a=(…);\@a}
。但是如果你有3个内部和一个外部,那就是4个数组,不是吗?此外,我会把它看作是一个简单的
AoA[3][3]
@两栖体,是的,如果你有3个内部和一个外部,那就是4个。因为他有5个数组(一个是用
my
创建的,另一个是用
[]
创建的),他没有3个内部和1个外部。这也可以通过
转储程序(\@myarray)看到
。啊,好吧——你是说,按照他声明的方式,他有5个,而他应该正确地有4个,了解Perl引用和去引用。与流行的观点相反,它们几乎完全不同于C风格的指针,在你的示例中,你对它们做了一些奇怪的事情。下面的Perl教程给出了最详细的说明对我所知道的主题的简明处理:
使用警告;
--这会提醒您对
@myarray
的奇怪初始化。对于引用,我更喜欢核心文档。它使引用更容易理解。@ikegami:我只是尽量靠近原始代码。
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");
}
$myarray = [[1,2,3],[4,5,6],[7,8,9]];
printf "My string %s\n", join(" ", @{$myarray->[0]});
$myarray = [[1,2,3],[4,5,6],[7,8,9]];
map{printf "My string %s\n", join(" ",@{$_})} @{$myarray};
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";
}