読者です 読者をやめる 読者になる 読者になる

Enumerable.ToLookup を忘れやすくて困る

.NET

自分で紹介記事まで書いておきながら,気を抜くと自分がその存在を忘れている.それが 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 にも欲しいような気がする.