2013-02-07 29 views
0

我有输入以下代码:创建数组的数组,然后检索值

my @resultsArray; 
my @dataArray; 
while (my ($id, $originLat, $originLng, $compensation) = $sth->fetchrow_array) { 
    @dataArray = ($id, $originLat, $originLng, $compensation); 
    print "ID: $id Lat: $originLat Lng: $originLng Compensation: $compensation\n"; 
    print "Data Array: @dataArray\n"; 
    #the above code words. 
    #I declare 
    push (@resultsArray, @dataArray); 
} 

my (@r1, @r2, @r3, @r4); 
#issue here 
for (@resultsArray) { 
    @r1 = pop(@resultsArray); 
    @r2 = pop(@resultsArray); 
    @r3 = pop(@resultsArray); 
    @r4 = pop(@resultsArray);    

    print "ID: $r4[0] Lat: $r3[0] Lng: $r2[0] Compensation: $r1[0]\n"; 
    #@r1 =(); 
} 

上述代码工作。阵列@dataArray被压入@resultsArray堆栈并分别弹出到@r1, @r2, @r3, @r4。然而这是可怕的代码。有没有更好的方法,更简洁的方式,线条少,仍然可读,通常更专业?

我正在寻找提高我的技能。如果我出现这样的事情,我觉得我可能会成为一个房间的笑柄。

+1

为什么你对每个'@ r1','@ r2','@ r3','@ r4'使用数组?你似乎将它们用作标量。 splice()是你的朋友。要从阵列中取出最后4个元素,可以使用:'@ r' = splice @resultsArray,-4。然后你可以利用$ r [0] .. $ r [3]。 –

+0

这真是太棒了史蒂文。谢谢。削减了我的代码,使它看起来更好。再次感谢。 – SonOfSeuss

回答

2

你只需要学习如何使用引用。这里是你的代码中的数组引用改写:

在Perl阵列
my @resultsArray; 
while (my ($id, $originLat, $originLng, $compensation) = $sth->fetchrow_array) { 
    my $dataArray = [$id, $originLat, $originLng, $compensation]; 
    print "ID: $id Lat: $originLat Lng: $originLng Compensation: $compensation\n"; 
    print "Data Array: @$dataArray\n"; 
    #the above code words. 
    #I declare 
    push @resultsArray, $dataArray; 
} 

for my $r (@resultsArray) { 
    print "ID: $r->[0] Lat: $r->[1] Lng: $r->[2] Compensation: $r->[3]\n"; 
} 

数组作为数组的数组引用最好代表。

魔术这里是

my $dataArray = [$id, $originLat, $originLng, $compensation]; 

这创建包含四个值匿名数组,然后设置标量$dataArray指向匿名数组。这参考然后被推到@resultsArray@resultsArray现在是一个标量数组,它恰好是对其他数组的引用。那些参考文献可以是去标记的使用->[n]构造来获得数组的各个成员。

+0

令人敬畏的吉姆。太感谢了。很酷。 – SonOfSeuss

相关问题