- ベストアンサー
perlで比較関数を使ったソートの方法
- perlで季節をソートするプログラムを作成する方法について説明します。
- 提供されたプログラムはソートの途中であり、比較関数の実装が必要です。
- 比較関数を使用して「春・夏・秋・冬」の順にソートする方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
'spring', 'summer', 'fall', 'winter'をいったん整数1~4に置き換えてから 数の比較をするのが分かりやすいかな。 ------------------------------------------------ my @array = ('spring','fall','winter','summer'); my @sorted_array = sort season_comp @array; print join(",",@array) . "\n"; print join(",",@sorted_array) . "\n"; sub season_comp() { my %season2num = ('spring'=>1,'summer'=>2,'fall'=>3,'winter'=>4); my $a_; if($season2num{$a}){$a_ = $season2num{$a};} else{$a_ = 0;} my $b_; if($season2num{$b}){$b_ = $season2num{$b};} else{$b_ = 0;} return $a_ - $b_; }
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2>季節の部分が以下のようなハッシュのデータだったとするとハッシュを季節順にソートするには同じように実装すればよいでしょうか?? ハッシュでなくて$hash のことだとすると 以下のような感じかと思います。 要するに、リファレンスとデリファレンスが判っていれば同じです。 ---------------------------------------------------------------- my $hash = [ { value => 'spring', type => 'season' }, { value => 'winter', type => 'season' }, { value => 'fall', type => 'season' }, { value => 'summer', type => 'season' }, ]; @$hash = sort season_cmp @$hash; sub season_cmp { my %seq = ('spring' => 1, 'fall' => 3, 'winter' => 4, 'summer' =>2 , 'autumn' => 3); $seq{$a->{value}} - $seq{$b->{value}}; } use Data::Dumper; print Dumper(@$hash);
お礼
解決できました。 ありがとうございました。 リファレンスなどはまだまだ勉強不足なのでよく調べておきたいと思います。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
季節の順序の情報が必要です。 my @array = ('spring','fall','winter','summer'); my @sort = sort number @array; sub number { my %seq = ('spring' => 1, 'fall' => 3, 'winter' => 4, 'summer' =>2 , 'autumn' => 3); $seq{lc $a} - $seq{lc $b}; } print join(",", @sort);
補足
回答ありがとうございます。 少し質問内容に追加したいことがあるので補足したいと思います。 季節の部分が以下のようなハッシュのデータだったとするとハッシュを季節順にソートするには同じように実装すればよいでしょうか?? my $hash = [ { value => 'spring', type => 'season' }, { value => 'winter', type => 'season' }, { value => 'fall', type => 'season' }, { value => 'summer', type => 'season' }, ];
補足
回答ありがとうございます。 少し質問内容に追加したいことがあるので補足したいと思います。 季節の部分が以下のようなハッシュのデータだったとするとハッシュを季節順にソートするには同じように実装すればよいでしょうか?? my $hash = [ { value => 'spring', type => 'season' }, { value => 'winter', type => 'season' }, { value => 'fall', type => 'season' }, { value => 'summer', type => 'season' }, ];