とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


サイドバー

言語

サーバ関連

ツール

API

読み物

その他

perl:array_sort_number

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

この記事は2006年10月02日に書かれたものです。

解説

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

@array = ( 1, 2, 3, 4, 5, 10, 11, 12 );
foreach(sort @array){
  print ;
  print "\n"
}
<code>
 
この実行結果は以下になる。
<code>
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

関連書籍

failed to fetch data: unkown error

failed to fetch data: unkown error

関連ページ

perl/array_sort_number.txt · 最終更新: 2020/06/23 14:10 (外部編集)