我想从1
到99
选择一个随机数。然后再次选择该号码,但这次丢弃之前的号码。有人可以帮助我。
答案 0 :(得分:2)
private List<int> numbers = Enumerable.Range(0, 100).ToList();
private Random rnd = new Random();
public int GetRandomInt()
{
var index = rnd.Next(0, numbers.Length);
var number = numbers[index];
numbers.RemoveAt(index);
return number;
}
答案 1 :(得分:2)
这就是我要做的事情:
var rnd = new Random();
var numbers = new Stack<int>(Enumerable.Range(1, 99).OrderBy(x => rnd.Next()));
您实际上是将数字列表随机化,然后将它们添加到堆栈中。现在你只需要这样做就可以得到每个数字:
var next = numbers.Pop()
您在numbers.Count == 0
时停止。简单。
答案 2 :(得分:0)
我通常用数组做。
每当你创建一个只是放在数组上的随机数。所以下次检查是否已经通过检入数组生成了数字。
答案 3 :(得分:0)
试试这个
IList<int> arr = Enumerable.Range(1, 99).ToList();
int randNum;
Random rnd = new Random();
randNum = rnd.Next(1, arr.Count());
MessageBox.Show(randNum.ToString());
arr = arr.Where(x => x != randNum).ToList();
答案 4 :(得分:0)
以下是Khanh TO的修订版,因为它不正确:
List<int> usedNumbers = new List<int>();
Random rand = new Random(new object().GetHashCode());
int number = 0;
for (int i = 0; i < 99; i++)
{
do
{
number = 1 + rand.Next(0, 99);
} while (usedNumbers.Contains(number));
usedNumbers.Add(number);
}
答案 5 :(得分:0)
我可以使用最短的代码,没有嵌套循环或删除列表元素。
class Program
{
static Random rnd=new Random();
static void Main(string[] args)
{
var list=new SortedDictionary<double, int>();
// Fill list
for (int i=1; i<=99; i++)
{
list.Add(rnd.NextDouble(), i);
}
// List Automatically random
var random_int=list.Values.ToArray();
// random_int = {45, 7, 72, .. }
}
}
class Program
{
static Random rnd=new Random();
static void Main(string[] args)
{
var list=new int[99];
// Fill list
for (int i=1; i<=99; i++)
{
list[i-1]=i;
}
Comparison<int> any=(x, y) =>
{
var z=2*rnd.NextDouble()-1;
return z.CompareTo(0);
};
// Randomize List
Array.Sort(list, any);
// list = { 49, 59, 21, 7, 18 ...}
}
}