1

このような文字列を含む配列がs1,s2,.. あり、「、」で分割し、コードである別の 2D 配列に文字列を含める必要があります

 @arr2D;
     $i=0;
     foreach $a (@array){
    $arr2D[$i]= split (/,/,$a);
    $i++;
     }
//print arr2D content 
    for ($j=0;$j<scalar @arr;$j++){
    print $arr2D[$j][0].$arr2D[$j][1]."\n";
    }

問題は、arr2Dコンテンツを印刷しようとしているときに何も得られないことです...何か提案はありますか?

4

1 に答える 1

4

分割の結果を配列自体にキャプチャする必要があります。以下の追加の括弧に注意してください。これにより、結果が配列に取り込まれ、配列参照が に割り当てられるため、目的$arr2D[$i]の 2 次元配列が得られます。

foreach my $elem (@array)
{
    $arr2D[$i] = [ split( /,/, $elem ) ];
    $i++;
}

$aまた、 perl はあまりにも多くのコンテキストでそれを特別に扱うため、おそらく の使用を避けたいと思うでしょう。$elemその名前を上記に変更したことに注意してください。

文体的には、$iこれを次のように書き換えることで と ループを削除できますmap

@arr2D = map { [ split /,/ ] } @array;

それはうまくいくはずで、はるかに簡潔です。

于 2013-07-01T17:25:57.603 に答える