我将如何最好地制作一个 Container 类,该类根据在添加元素期间输入的权重返回随机值?
理想情况下,它应该像这样使用:
var randomContainer = new RandomContainer<IThing>();
randomContainer.Add(new CoolThing(), 80);
randomContainer.Add(new AwesomeThing(), 20);
IThing thing = randomContainer.Get();
所以 thing 有 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 有意义吗?