2012-06-13 15 views
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

第一个问题是您没有阵列数组,因为您使用{}来构造@a@b,您最终会得到一组散列数组。
(顺便说一句,ab是糟糕的选择为标识符,尤其是考虑到使用标$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模块进行调试。

+1

'$ a [1] cmp $ b [1]'应该是'$ a - > [1] <=> $ b - > [1]' – ikegami

+1

'@ a'和'@ b'不会干涉如你所见,在这种情况下。 – ikegami

+1

@ikegami:谢谢,在我的测试中解决了这个问题,但忘记了它:)至于'@ a',确实这里不是问题,但最好避免它们(在我看来)。 – Mat