2013-02-07 27 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

相關問題