在做项目时,我逻辑服循环里面使用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};
}