示例#1
0
        private T RandomlySelectOption <T>(IEnumerable <T> options) where T : IWeighted
        {
            var opts           = options.ToArray();
            var totalWeights   = opts.Sum(o => o.Weight);
            var selectedNumber = _randomNumber.Number(totalWeights);

            var currrentWeight = 0;

            foreach (var t in opts)
            {
                currrentWeight += t.Weight;
                if (currrentWeight > selectedNumber)
                {
                    return(t);
                }
            }
            return(opts.Last());
        }