関数の実行結果をキャッシュするDictionary
関数の実行結果をキャッシュすると言うか、keyに対応したvalueが自動生成されるディクショナリ。
class LazyDictionary<TKey, TValue> { Dictionary<TKey, TValue> dic; Func<Tkey, TValue> valueCreator; public LazyDictionary(Dictionary<TKey, TValue> dic, Func<TKey, TValue> valueCreator){ this.dic = dic; this.valueCreator = valueCreator; } public TValue this[TKey key}{ get{ TValue value; if(dic.TryGetValue(key, out value) == false){ value = valueCreator(key); dic.Add(key, value); } return value; } } }
これがすごく便利。寝て起きて見たらひどいミスがあった。最近調子悪いな。