• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlで比較関数を使ったソートの仕方)

perlで比較関数を使ったソートの方法

このQ&Aのポイント
  • perlで季節をソートするプログラムを作成する方法について説明します。
  • 提供されたプログラムはソートの途中であり、比較関数の実装が必要です。
  • 比較関数を使用して「春・夏・秋・冬」の順にソートする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

'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_; }

tadao1213
質問者

補足

回答ありがとうございます。 少し質問内容に追加したいことがあるので補足したいと思います。 季節の部分が以下のようなハッシュのデータだったとするとハッシュを季節順にソートするには同じように実装すればよいでしょうか?? my $hash = [ { value => 'spring', type => 'season' }, { value => 'winter', type => 'season' }, { value => 'fall', type => 'season' }, { value => 'summer', type => 'season' }, ];

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#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);

tadao1213
質問者

お礼

解決できました。 ありがとうございました。 リファレンスなどはまだまだ勉強不足なのでよく調べておきたいと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

季節の順序の情報が必要です。 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);

tadao1213
質問者

補足

回答ありがとうございます。 少し質問内容に追加したいことがあるので補足したいと思います。 季節の部分が以下のようなハッシュのデータだったとするとハッシュを季節順にソートするには同じように実装すればよいでしょうか?? my $hash = [ { value => 'spring', type => 'season' }, { value => 'winter', type => 'season' }, { value => 'fall', type => 'season' }, { value => 'summer', type => 'season' }, ];

関連するQ&A