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?或阵列更好?
答案 0 :(得分:3)
创建一个Max length数组,并插入从0到Max的数字。然后使用随机算法选择数组的一个元素(可能是mod(Max-chosenElementsNumber))。从数组中删除元素后。完成。
答案 1 :(得分:3)
或者使用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();
答案 2 :(得分:2)
您可以使用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();
答案 3 :(得分:0)
如果您获得重复的随机数,请继续获取另一个随机数。
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;
}
答案 4 :(得分:0)
这是排序整数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();