List::Util#pairmap|pairkeys が便利 (Re: ハッシュっぽい配列からkeysだけ取り出したい) 追記有り
http://hisaichi5518.hatenablog.jp/entry/2013/03/25/151942
Github::Hooks::Manager作ってるときに、HTML::Shakanに手を入れたりしてて、その流れでHTML::Shakanのオーナーになったりしてたのですが、その際に知った List::Util#pairmapが便利だった。
PSGIのSPECでも使われていたりしていることも関連しているのか、最近key valueのペアが入った配列を見かける頻度が上がってきたように思います。
で、そういうのを上手く扱う方法が無いのかなーとかみんな思っていたかとおもうのですが、灯台下暗し、List::Util
にpairmap()
ってのがありました。以下の様な感じで使います。
my @results = pairmap {[$a, $b]} qw/1 1 2 2 3 3 4 4/;
与えられたリストから、値を2つづつ取り出して、ブロックの中で、$a
と$b
に代入してくれているという具合です。例えばキーの部分だけ取り出したい場合は、以下の要領でOKです。
my @keys = pairmap {$a} qw/1 1 2 2 3 3 4 4/;
これを踏まえてタイトルにもある @hisaichi5518 君のブログのベンチに追記して回すと以下のとおりです。速い!最高!
$ perl pairmap.pl
10
Rate no copy copy lestrrat-san tokuhirom-san songmu-san
no copy 214824/s -- -12% -48% -48% -60%
copy 242811/s 13% -- -41% -41% -54%
lestrrat-san 411162/s 91% 69% -- -0% -23%
tokuhirom-san 411481/s 92% 69% 0% -- -23%
songmu-san 531350/s 147% 119% 29% 29% --
今目の前でぶつかり稽古みてて、List::Util#pairmap 使えばいいのになーとか思ってる。
ちなみに、標準モジュールだから、cpanfileに書かなくてもOKやーとか思ってると、pairmapが入ったのは今年だったりするのでちゃんと1.32以降のバージョンを記載しないといけ無いので注意。僕はそれを怠って、HTML::ShakanのテストをTravisを盛大にこかしました。Travis最高便利!
追記
ブコメでkitsさんに、この用途だったらpairkeys
ってのが別であることを教えていただいたので、再度ベンチ。
圧倒的に速い!