如何创建一个不重复的随机int数列表?
本文关键字:随机 int 数列 列表 一个 何创建 创建 | 更新日期: 2023-09-27 18:12:18
int Min = 0;
int Max = 20;
int[] test2 = new int[5];
Random randNum = new Random();
for (int i = 0; i < test2.Length; i++)
{
test2[i] = randNum.Next(Min, Max);
}
如何确保数组中0到20之间的数字不相同?例如,我不想在数组中有数字5的两倍。
如何使用List呢?还是数组更好?
创建一个长度为Max的数组,并插入从0到Max的数字。然后使用随机算法从数组中选择一个元素(可能是mod(Max-chosenElementsNumber))。从数组中删除元素后。做。
或者使用LINQ。(通过生成具有Enumerable.Range
的Min和Max之间的序列):
var rnd = new Random();
var res = Enumerable.Range(Min, Max - Min + 1).OrderBy(x => rnd.Next()).ToList();
如果您想要选择特定数量的序列,可以使用Take
方法。这样的:
var res = Enumerable.Range(Min, Max - Min + 1).OrderBy(x => rnd.Next()).Take(5).ToList();
您可以使用HashSet<int>
,它不允许重复。
int Min = 0;
int Max = 20;
var test2 = new HashSet<int>();
Random randNum = new Random();
while(test2.Count < 5)
{
test2.Add(randNum.Next(Min, Max));
}
你也可以随机化LINQ:
int Min = 0;
int Max = 20;
Random randNum = new Random();
var test2 = Enumerable.Range(Min, Max - Min + 1)
.OrderBy(x => randNum.Next())
.Take(5)
.ToArray();
如果你得到一个重复的随机数,就继续得到另一个随机数。
int Min = 0;
int Max = 20;
int[] test2 = new int[5];
Random randNum = new Random();
for (int i = 0; i < test2.Length; i++)
{
int r;
do
{
r = randNum.Next(Min, Max);
} while (test2.Contains(r));
test2[i] = r;
}
这是整数0到19的正常排序方法
List<KeyValuePair<int, int>> numbers = new List<KeyValuePair<int, int>>();
Random randNum = new Random();
for (int i = 0; i < 20; i++)
{
numbers.Add(new KeyValuePair<int,int>(i, randNum.Next()) );
}
numbers = numbers.OrderBy(x => x.Value).ToList();
Console.WriteLine(string.Join(",", numbers.Select(x => x.Key).ToArray()));
Console.ReadLine();