最大、最小、レンジ、合計、平均は一撃必殺で算出したい
数値のリストがあって、なんらか集計をする場合、最大値、最小値、レンジ、合計、平均の5項目は、だいたいベースメントとしてまとめて出力すると思うのです。
だけど、例えば Statistics::Lite を使ったりすると、それぞれの値に毎度リストを渡して算出するからもったいない。できれば一撃必殺でやっつけたいですよね。
というわけで書きました。
Statistics::Swoop
使い方は超簡単です。
use Statistics::Swoop;
my $ss = Statistics::Swoop->new([qw/1 2 3 4 5 6 7 8 9 10/]);
print $ss->max; # 10
print $ss->min; # 1
print $ss->sum; # 55
print $ss->avg; # 5.5
print $ss->range; # 9
速度的には Statistics::Lite で同じことをやるより 180% くらい速いです。
$ perl demos/benchmark.pl
Benchmark: running Lite, Swoop for at least 1 CPU seconds...
Lite: 1 wallclock secs ( 1.09 usr + 0.00 sys = 1.09 CPU) @ 110.09/s (n=120)
Swoop: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 313.08/s (n=335)
Rate Lite Swoop
Lite 110/s -- -65%
Swoop 313/s 184% --
benchmark のソースはディストリビューションの demos ディレクトリに入れてあります。