列表框中的唯一随机数

时间:2013-03-27 13:22:07

标签: c# random

我想知道如何在我的列表框中获得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个随机数填充列表框,但我需要它们是唯一的。

非常感谢任何帮助,

4 个答案:

答案 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())
}