Enumerable.ToLookup を忘れやすくて困る
自分で紹介記事まで書いておきながら,気を抜くと自分がその存在を忘れている.それが Enumerable.ToLookup.
以下は,クイックソートなどでよく現れるパーティション分割に ToLookup を使ってみた例.
using System; using System.Linq; using Achiral; static class Program { static void Main(string[] args) { var seq = Make.Repeat(new Random()) .Select(rand => rand.Next(0, 1000)); var lookup = seq.Take(1000) .ToLookup(i => i < 500 ? "500未満" : "500以上"); foreach (var item in lookup) { Console.WriteLine(item.Key + ": " + item.Count() + " 個"); } } }
500以上: 495 個 500未満: 505 個
ついでに『Ruby 1.9.0 Enumerable モジュールと LINQ Standard Operators 対応表 (書きかけ) - NyaRuRuの日記』を更新.Ruby の partition に対応する LINQ 演算子に ToLookup をあてておいた.
自分の twitter のログぐらいなら,オンメモリで十分何とかなりそうなので,発言者とか日付とかで最初に ToLookup してみるのも良いかもなぁ.
あとは Lookup から XML Element Tree への変換,およびその逆あたりかな.後で試してみよう.あるいは ILookup<T,T> によるグラフ表現とか.
ついでに同等物が PowerShell にも欲しいような気がする.