List::Utils::Nest作りました
簡単なデータの分析や下処理にRやperl、JavaScriptなど手元にあるものや、すぐ視覚化してみたいかどうかで、適当に選んで使っています。 d3.jsのd3.nestが大変使いやすくperlでも使いたかったので作りました。
使い方
use List::Utils::Nest; my $sample = [ {userid => 1, itemid => 1, quantity => 3}, {userid => 1, itemid => 4, quantity => 3}, ... {userid => 3, itemid => 2, quantity => 3}, {userid => 3, itemid => 4, quantity => 3}, {userid => 3, itemid => 4, quantity => 1}, ]; my $entries = List::Utils::Nest->new($sample)->key('userid')->entries(); # [{ # values => [ # {userid => 1, itemid => 1, quantity => 3}, # {userid => 1, itemid => 4, quantity => 3} # ], # key => 1 # }, # ... # { # values => [ # {userid => 3, itemid => 2, quantity => 3}, # {userid => 3, itemid => 4, quantity => 3}, # {userid => 3, itemid => 4, quantity => 1} # ], # key => 3 # } # ]
というように、nest化することができます。超便利! nestは「new List::Utils::Nest」のaliasです
入れ子
入れ子にできます!
my $entries = nest($sample, delimiter => ",")->key('userid')->key('itemid')->entries();
複数キー
複数のキーを使うこともできます
my $entries = nest($sample)->key('userid', 'itemid')->entries();
デリミタ
複数のキーを使った時のデフォルトデリミタは「_____」ですが、変更できます
my $entries = nest($sample, delimiter => ",")->key('userid', 'itemid')->entries();
キーをサブルーチンで作る
keyにサブルーチンを渡すと、第1引数にオブジェクトを取れます。これを好きなように嬲って(例えば、日とか曜日とか、時間帯とか)返せば、それをキーとして使えます