blog.bouzuya.net

2012-11-01 LINQ(ToDictionary)

友人が唐突にIDictionary<TKey,TValueA>からIDictionary<TKey,TValueB>への変換はどうやるのが良いかたずねられた。なんでもそういうコードを考えたが良い方法が思いつかず、foreachで強引に詰め替え処理を書いたらしい。

安全ではあるが面白くないやりかただったので、「System.Linq.Enumerable.ToDictionary<TSource,TKey>を使え」と教え、動作確認していない、次のようなC#のコードを示した。

// C#
// Dictionary<string,string> -> Dictionary<string,int>
var d1 = new Dictionary<string, string>()
{
    {"apple", "300"},
    {"banana", "100"},
    {"orange", "200"}
};
var d2 = d1.ToDictionary(p => p.Key, p => int.Parse(p.Value));

int.Parseの部分にFunc<TValueB,TValueA>のような変換するため手続きを渡せば良い。C#、そしてLINQは良い。とても便利な道具である。

12 min.