- ベストアンサー
ソートについて
以下のデータを先頭の8,45で降順ソートにしたいのですが、どうすればよいのでしょうか? use strict; my @DAT=(); push @DAT, [8, 1, undef]; push @DAT, [45, 2, undef]; また、次の場合も降順ソートさせたいです。 push @DAT, {'ten'=>8, 'cd'=>1, 'memo'=>undef}; push @DAT, {'ten'=>45, 'cd'=>2, 'memo'=>undef};
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
sort関数を使うときに、要素の比較方法を定義した比較関数(かブロック)を指定します。 > use strict; > my @DAT=(); > push @DAT, [8, 1, undef]; > push @DAT, [45, 2, undef]; [方法1] my @DAT_sorted = reverse sort {$a->[0] <=> $b->[0]} @DAT; [方法2] my @DAT_sorted = sort {-($a->[0] <=> $b->[0])} @DAT; # $aと$bをひっくり返して、{$b->[0] <=> $a->[0]}としても良い [方法3] sub comp_func { return -($a->[0] <=> $b->[0]); } my @DAT_sorted = sort comp_func @DAT; > push @DAT, {'ten'=>8, 'cd'=>1, 'memo'=>undef}; > push @DAT, {'ten'=>45, 'cd'=>2, 'memo'=>undef}; [方法1] my @DAT_sorted = reverse sort {$a->{'ten'} <=> $b->{'ten'}} @DAT; (後はわかると思うので省略)
その他の回答 (1)
- okiyoshi
- ベストアンサー率34% (11/32)
前回質問の「変数の永続化?」については解決しましたか?
補足
永続化は、まだ理解できていませんので、Perl本を購入してしばらくしてから取り掛かろうと思います。