0

我在这里做一个最小的例子,我应该如何在数组中转储数组的值?

多个数组,其中包含一个字符串值和一个数字,现在我按第二个值对数组进行排序,并按顺序读取第一个字段的值。

my @a = { "A" , 123 };
my @b = { "B" , 9 };

my @entries = ();
push @entries , \@a;
push @entries , \@b;

@entries = sort { $a[1] cmp $b[1] } @entries;
for (@entries)
{
        print @_[0] , "\n"; // should be "A\nB" after for loop
}

我应该查看什么文件?嗯...它不像数组中的普通数组,例如像$a[0][0].

4

1 回答 1

4

第一个问题是你没有一个数组数组,你最终有一个哈希数组,因为{}你用来构造@aand @b
(顺便说一句,a作为b标识符的选择很糟糕,特别是考虑到标量$a$b排序块的使用——您不想将自己与在这些排序块中取消引用的内容混淆。)

如果您使用以下方法解决此问题:

my @a = ("A", 123);
my @b = ("B", 9);

然后你修复你的排序以数字排序(cmp是字符串排序,$a并且$b是数组引用):

sort { $a->[1] <=> $b->[1] } @entries;

然后将您的print行更改为:

print $_->[0], "\n";

你应该看到你期望的结果。

在脚本的顶部添加use strict; use warnings;,并充分利用Data::Dumper模块来调试它。

于 2012-06-13T06:10:03.807 回答