我想知道如何在我的列表框中获得 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 个随机数填充列表框,但我需要它们唯一。
任何帮助将不胜感激,
HashSet<int> uniques = new HashSet<int>();
Random random = new Random();
while(uniques.Count!= 8)
{
uniques.Add(random.Next(0,20)); //terrible upper bound
}
将Set
保证其中不能包含重复项。
在您的代码中添加此检查: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));
您可以创建一个从 0 到 n 的列表,从该列表中选择一个随机数,将其删除并将您的最大值减一。这样,您就知道您只会进行 x 次 for 查找。
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);
}
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())
}