数値の値でソートする – Perl

  • このエントリーをはてなブックマークに追加
  • LINEで送る
この記事は 2006年10月2日 に書かれたものです

以下のようなコードを書くと、文字列として扱われてしまい、意図した結果にならない場合がある。

@array = ( 1, 2, 3, 4, 5, 10, 11, 12 );
foreach(sort @array){
  print ;
  print "\n"
}
- Sponsored Link -

この実行結果は以下になる。

1
10
11
12
2
3
4
5

これを回避するコードは次のようなものである。

サンプル

@array = ( 1, 2, 3, 4, 5, 10, 11, 12 );

#-- 昇順 --#
foreach(sort {$a <=> $b} @array){
  print ;
  print "\n"
}

#-- 降順 --#
foreach(sort {$b <=> $a} @array){
  print ;
  print "\n"
}

実行結果

1
2
3
4
5
10
11
12

12
11
10
5
4
3
2
1

昇順と降順は、$a,$bの位置を変更するだけである。 ちなみに、$a, $bは my などをつけなくても、Perl上ですでに定義されているため、use strictした環境でもエラーにはならない。

なお、文字列して比較したい場合には <=>cmpに置き換える。

use strict;

my @array = ( 1, 2, 3, 4, 5, 10, 11, 12 );
foreach(sort {$a cmp $b} @array){
  print ;
  print "\n"
}
print "\n";

foreach(sort {$b cmp $a} @array){
  print ;
  print "\n"
}
1
10
11
12
2
3
4
5

5
4
3
2
12
11
10
1

コメント

コメント欄は休止中です。お問い合わせはこちらからどうぞ。ご質問はTwitterにリプを投げてください。

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで300円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -