[perlメモ]無名配列

データを配列に格納して一気処理する場合通常下記のようにする。

 

my @address = (‘田中’,’伊藤’,’鈴木’);

foreach(@address){
    print "$_\n";
}

実行すると下記のようになる。

田中
伊藤
鈴木

データが一種類の場合はこれでいいが、たとえば名前のほかに電話番号や住所などの情報を持ちたい場合配列一個では足りなくなる。この場合、ハッシュを利用したりするが、ハッシュだと取り出される順序がばらばらになるので、ソートの処理が必要になったり、そのためにIDのようなものを持たなければならなくなる。配列にハッシュを格納して格納順に取り出したい場合などには無名配列が便利です。

下記のサイトの説明がわかりやすいと思います。

無名配列・無名ハッシュ/楽

無名ハッシュを使わない場合は下記のような工夫というか姑息な手段を使ったりします。何をやっているかというと配列一個にデータを「:」をセパレータにして区切って複数のデータを詰め込んで、取り出すときにsplitで分割しています。これでもいいのですが、見通しも悪くメンテナンス性が悪いです。

my @address = (
    ‘田中:03-1111-XXXX:東京’,
    ‘伊藤:03-2222-XXXX:神奈川’,
    ‘鈴木:03-3333-XXXX:熊本’,
);

foreach(@address){
    my ($name,$tel,$adr) = split(/:/);
    print "$name $tel $adr\n";
}

実行すると下記のようになります。

田中 03-1111-XXXX 東京
伊藤 03-2222-XXXX 神奈川
鈴木 03-3333-XXXX 熊本

 

無名配列をつかってスマートにするとこうなります。扱うデータが増えた場合のメンテナンス性もいいですし、データの構造もわかりやすく一目瞭然です。

my $address = [
    {‘name’=>’田中’,    ‘TEL’=>’03-1111-XXXX’,    ‘ADR’=>’東京’        },
    {‘name’=>’伊藤’,    ‘TEL’=>’03-2222-XXXX’,    ‘ADR’=>’神奈川’        },
    {‘name’=>’鈴木’,    ‘TEL’=>’03-3333-XXXX’,    ‘ADR’=>’熊本’        },
];

foreach my $z (@{$address}){
    print "$z->{‘name’} $z->{‘TEL’} $z->{‘ADR’}\n";
}

実行結果は上の例と同じになります。

(Visited 136 times, 1 visits today)

タグ :