有关循环Random随机数重复的解决方案

  • Post author:
  • Post category:其他


在做项目时,我逻辑服循环里面使用random时发现会随机出重复数。

我在网上查了资料,然后使用的方法:

float objRandomCount = new Random(Guid.NewGuid().GetHashCode()).Next(0, num);

可以解决这个问题。

然后我又根据需求延伸写了两个重载方法,是需要从List<uint>里面根据List<uint>的概率里面随机出对应的数和数量

下面的方法直接复制到你们的代码里试试

/// <summary>

/// 传入list<uint>需要随的数组和list<uint>概率

/// </summary>

/// <param name=”objsIdList”></param>

/// <param name=”probabilityList”></param>

/// <returns></returns>

public uint CommonRandom(List<uint> objsIdList,  List<uint> probabilityList)

{


List<RandomConstOne> randomList = new List<RandomConstOne>();

for (int i = 0; i < objsIdList.Count; i++)

{


RandomConstOne randomConst =new RandomConstOne();

randomConst.objId = objsIdList[i];

if (i == 0)

{


randomConst.objProbality = probabilityList[i];

}

else

{


randomConst.objProbality = probabilityList[i] + randomList[i-1].objProbality;

}

randomList.Add(randomConst);

}

float objRandomCount = new Random(Guid.NewGuid().GetHashCode()).Next(0, randomList[randomList.Count-1].objProbality);

int idNum = 0;

for (int i = 0; i < randomList.Count; i++)

{


if (i == 0)

{


if (objRandomCount >= 0 && objRandomCount < randomList[0].objProbality)

{


idNum = i;

}

}

else

{


if (objRandomCount >= randomList[i-1].objProbality && objRandomCount < randomList[i].objProbality)

{


idNum = i;

}

}

}

return  randomList[idNum].objId;

}

/// <summary>

/// 传入list<uint>需要随的数组和list<uint>概率和对应每个物品数量

/// </summary>

/// <param name=”objsIdList”></param>

/// <param name=”probabilityList”></param>

/// <param name=”objNumsList”></param>

/// <returns></returns>

public List<uint> CommonRandom(List<uint> objsIdList,  List<uint> probabilityList, List<uint> objNumsList)

{


List<RandomConstTwo> randomList = new List<RandomConstTwo>();

for (int i = 0; i < objsIdList.Count; i++)

{


RandomConstTwo randomConst =new RandomConstTwo();

randomConst.objId = objsIdList[i];

randomConst.objNum = objNumsList[i];

if (i == 0)

{


randomConst.objProbality = probabilityList[i];

}

else

{


randomConst.objProbality = probabilityList[i] + randomList[i – 1].objProbality;

}

randomList.Add(randomConst);

}

float objRandomCount = new Random(Guid.NewGuid().GetHashCode()).Next(0, randomList[randomList.Count-1].objProbality);

int idNum = 0;

for (int i = 0; i < randomList.Count; i++)

{


if (i == 0)

{


if (objRandomCount >= 0 && objRandomCount < randomList[0].objProbality)

{


idNum = i;

}

}

else

{


if (objRandomCount >= randomList[i – 1].objProbality && objRandomCount < randomList[i].objProbality)

{


idNum = i;

}

}

}

return  new List<uint>(){randomList[idNum].objId, randomList[idNum].objNum};

}



版权声明:本文为qq_40717065原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。