配置抽奖几率,实现随机抽奖
定义奖品类型类
Class PrizeType
{
public int Probability {get; set;}
public int Quantity {get; set;}
public int RandId {get; set;}
public string PrizeName {get; set;}
}
var allPrizeList = new List<PrizeType>();
allPrizeList.Add(new PrizeType(){Probability = 5000, Quantity = 10, PrizeName = "奖1", RandId = 0});
allPrizeList.Add(new PrizeType(){Probability = 4000, Quantity = 10, PrizeName = "奖2", RandId = 1});
allPrizeList.Add(new PrizeType(){Probability = 1000, Quantity = 10, PrizeName = "奖3", RandId = 2});
public PrizeType getRand()
{
PrizeType prize = null;
int result = -1, proSum = 1, indexResult = 0;
var dicRand = new Dictionary<int, int>();
int[] proArr = new int[dateSource.Count];
for (int i=0; i<dateSourcePrizeList.Count; i++)
{
proArr[i] = dataSourcePrizeList[i].Probability;
}
var arr = proArr.OrderBy(s => s);
foreach(int val in arr)
{
dicRand[proSum] = indexResult ++;
proSum += val;
}
int length = proArr.Length;
Random ran = new Random(Guid.NewGuid().GetHashCode());
int ranNum = ran.Next(1, proSum);
//计算随机数所在的分组序号
result = dicRand.Where(a => a.Key <= ranNum).OrderByDescending(a => a.Key).FirstOrDefault().Value;
prize = allPrizeList.FirstOrDefault(a => a.RandId == result);
return prize;
}

浙公网安备 33010602011771号