范围内获取不重复的随机数

C#范围内生成不重复随机数 范围为 [startNum, endNum] , 其中0<=startNum<endNum 。 生成的个数为needNum,并且needNum <= endNum - startNum + 1 因为C#的Random类不进行种子设置的话是伪随机,所以我们要改进一下Random类的Next方法,让它尽可能朝着真随机靠近。 优化后的代码如下: public static int Random(int starNum, int endNum) { byte [] randomBytes = new byte[4]; RNGCryptoServiceProvider rngProvider = new RNGCryptoServiceProvider(); rngProvider.GetBytes(randomBytes); Int32 iSeed = BitConverter.ToInt32(randomBytes, 0); Random random = new Random(iSeed); return random.Next(starNum, endNum + 1); } public static bool IsParameterValid(int startNum, int endNum, int needCount) { if (startNum < 0 || endNum <0 || startNum > endNum || needCount == 0 || needCount > endNum - startNum + 1) { return false; } return true; } 方法一 使用两个数组,从第一个数组中随机位置抽取一个,放到第二个数组中,并且在第一个数组中删除这个值, 接下来从第一个数组的剩余数据中重复上面的步骤,直到第二个数组中获得了目标个数的值停止。 代码如下:...

April 16, 2022 · 2 min · 240 words · Link