Tom*_*ski 5 .net c# random algorithm
我的.net项目中有一个要求,我需要从集合中选择一个项目,每个项目都有一个权重(整数从1到10)分配给它.我需要一个随机生成器来考虑这个权重,即权重越高,选择对象的机会就越多.虽然算法描述也很好,但是.net中的任何代码示例都很受欢迎.
编辑:快速复制/粘贴C#代码,以防有人偶然发现.
    class RandomWeightedSelector<T>
    {
        private List<T> items = new List<T>();
        public void Add(T item, uint weight = 1)
        {
            for (int i = 0; i < weight; i++)
                items.Add(item);
        }
        public T GetRandom()
        {
            return items[new Random().Next(0, items.Count)];
        }
    }
这是一种算法,不需要多次将项目添加到列表中.它也可以使用非整数权重,但是如果您使用System.Random中的NextDouble,则必须将所有权重缩放到最多1,或者将NextDouble中的值乘以S以获得它期望的范围.
给出项目列表L(I,W),其中我是项目,W是权重: