配置抽奖几率,实现随机抽奖

定义奖品类型类

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;

}

posted @ 2018-01-29 16:57  Matrix博客园  阅读(250)  评论(0)    收藏  举报