我想知道如何在我的列表框中获得8个唯一的随机数,代码到目前为止:
lbLeft.Items.Clear();
Random rnd = new Random();
int n = rnd.Next();
int x = 8;
do
{
lbL.Items.Add(rnd.Next(0, 20));
} while ((lbLeft.Items.Count != x));
它用8个随机数填充列表框,但我需要它们是唯一的。
非常感谢任何帮助,
答案 0 :(得分:6)
HashSet<int> uniques = new HashSet<int>();
Random random = new Random();
while(uniques.Count!= 8)
{
uniques.Add(random.Next(0,20)); //terrible upper bound
}
Set
将保证重复项不能包含在其中。
答案 1 :(得分:4)
在代码中添加此项检查:if(!lbl.Items.Contains(n))
lbLeft.Items.Clear();
Random rnd = new Random();
int n = rnd.Next();
int x = 8;
do
{
n = rnd.Next(0, 20);
if(!lbl.Items.Contains(n))
lbL.Items.Add(n);
} while ((lbLeft.Items.Count != x));
答案 2 :(得分:1)
您可以创建从0到n的列表,从该列表中选择一个随机,删除它并将最大值减1。这样你就知道你只会看x次。
lbLeft.Items.Clear();
Random rnd = new Random();
int x = 8;
int upperBound = 20;
List<int> uniqueInts = new List<int>(upperBound);
for (int i = 0; i < upperBound; i++)
uniqueInts.Add(i);
for (int i = 0; i < x; i++ )
{
int index = rnd.Next(0, uniqueInts.Count);
lbLeft.Items.Add(uniqueInts[index]);
uniqueInts.RemoveAt(index);
}
答案 3 :(得分:0)
lbLeft.Items.Clear();
Random rnd = new Random();
for (int i = 0; i < 8; i++)
{
n = rnd.Next(0, 20);
while(lbLeft.Contains(n.ToString())
{
n = rnd.Next(0, 20);
}
al.Add(n);
lbL.Items.Add(n.ToString())
}