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

スキルアップを目指しています。こんなの出たら部屋の笑いものになりそうな気がする。

4

1 に答える 1

2

参照の使用方法を学ぶ必要があるだけです。配列参照で書き直したコードは次のとおりです。

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

Perl の配列の配列は、配列参照の配列として表現するのが最適です。

ここの魔法は

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

これにより、4 つの値を含む無名配列が作成され、無名配列を指すようにスカラーが設定されます。 $dataArrayこの参照は にプッシュされ@resultsArrayます。 @resultsArray他の配列への参照であるスカラーの配列になりました。これらの参照は、配列の個々のメンバーを取得する構造を使用して参照できます。->[n]

于 2013-02-07T02:57:31.950 に答える