C# 快速随机不重复取样
时间: 2023-07-29 18:09:33 浏览: 57
你可以使用Fisher-Yates算法来实现快速随机不重复取样。以下是一个示例代码,它将从一个整数数组中随机选择k个元素,而且这k个元素不会重复出现:
```csharp
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int k = 5;
Random rand = new Random();
// Fisher-Yates算法
for (int i = 0; i < k; i++)
{
int j = rand.Next(i, numbers.Length);
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
// 取样结果
int[] result = new int[k];
Array.Copy(numbers, result, k);
```
在这个示例中,我们首先定义了一个整数数组`numbers`和一个整数k,表示我们要从数组中随机选择k个元素。然后,我们使用Random类创建一个随机数生成器`rand`。接下来,我们使用Fisher-Yates算法从数组中随机选择k个元素。最后,我们将选出的k个元素存储在一个新的整数数组`result`中。
相关问题
c# 随机数组不重复
在C#中生成不重复的随机数组有多种方法。引用[1]中的代码使用了for循环和while循环的嵌套来实现。首先,通过Random类生成一个随机数,然后使用一个布尔变量a来判断生成的数是否已经存在于数组中。如果存在,则继续生成新的随机数,直到生成的数在数组中不存在为止。然后将生成的数添加到数组中。最后,使用foreach循环输出数组的内容。
引用[2]中的代码使用了List来存储所有可能的数。通过while循环,每次从List中随机取出一个数,并将其从List中移除。然后将取出的数添加到结果列表中,直到结果列表的长度达到要求。最后返回结果列表。
引用[3]中的代码使用了递归的方式来实现。首先,通过Random类生成一个随机数,然后使用一个自定义的方法getNum来判断生成的数是否已经存在于数组中。如果存在,则重新随机获取一个数,并再次调用getNum方法进行判断,直到生成的数在数组中不存在为止。然后将生成的数添加到数组中。
以上是三种常见的实现方法,你可以根据自己的需求选择其中一种来生成不重复的随机数组。
C#如何生成随机不重复的整数
在 C# 中,可以使用 Random 类生成随机数,然后使用 HashSet 存储已经生成的随机数,以确保生成的随机数不重复。下面是示例代码:
```csharp
int minValue = 1; // 随机数的最小值
int maxValue = 100; // 随机数的最大值
int count = 10; // 需要生成的随机数的个数
Random random = new Random();
HashSet<int> set = new HashSet<int>();
while (set.Count < count)
{
int randomNumber = random.Next(minValue, maxValue + 1); // 生成随机数
if (!set.Contains(randomNumber))
{
set.Add(randomNumber); // 将随机数加入 set 中
}
}
foreach (int number in set)
{
Console.WriteLine(number); // 输出生成的随机数
}
```
上面的代码会生成 10 个不重复的随机数,范围是 1 到 100。如果需要生成更多的随机数,可以调整 count 的值,如果需要修改随机数的范围,可以修改 minValue 和 maxValue 的值。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)