要素の追加中に入力された重みに基づいてランダムな値を返す Container クラスを作成するにはどうすればよいでしょうか?
理想的には、次のように使用できるはずです。
var randomContainer = new RandomContainer<IThing>();
randomContainer.Add(new CoolThing(), 80);
randomContainer.Add(new AwesomeThing(), 20);
IThing thing = randomContainer.Get();
つまり、80% の確率で CoolThing になり、20% の確率で AwesomeThing になります。
ただし、アルゴリズムでは、重みの合計が 100 になる必要はないため、これも可能である必要があります。
var randomContainer = new RandomContainer<IThing>();
randomContainer.Add(new CoolThing(), 398);
randomContainer.Add(new AwesomeThing(), 485);
randomContainer.Add(new SpecialThing(), 1);
IThing thing = randomContainer.Get();
そのようなアルゴリズムを実装する方法はありますか? クラスに必要なメンバー/プロパティは何ですか? ICollection を実装する意味はありますか?