.net C# 抽奖,中奖

demo设置了8个奖项,每个奖项可以自定义中奖率,精度为1/10000

        public string PrizeDraw()
        {
            //奖品以及中奖率
            const string prizeString = "奖品一:33,奖品二:30,奖品三:9,奖品四:8,奖品五:7,奖品六:6,奖品七:5,奖品八:2";
            //将中奖率*100再取整,放在数组中,并从小到大排序
            var prizeArray = prizeString.Split(',').Select(j => new { Prize = j.Split(':')[0], Change = (int)(double.Parse(j.Split(':')[1])* 100) }).OrderBy(j => j.Change).ToArray();
            //将中奖率累加,放到字典里
            var prizeDictionary = new Dictionary<string, int>();
            for (var i = 0; i < 8; i++)
            {
                var allChange = 0;
                for (var j = 0; j <= i; j++)
                {
                    allChange += prizeArray[j].Change;
                }
                prizeDictionary.Add(prizeArray[i].Prize, allChange);
            }
            //产生一个1-10000的随机数
            var rd = new Random();
            var rdChange = rd.Next(1, 10001);
            //找第一个大于随机值的奖项
            return prizeDictionary.First(j => j.Value >= rdChange).Key;
        }

 

posted @ 2017-03-16 15:40  范斯  阅读(2009)  评论(0编辑  收藏  举报