2012-04-24 72 views
1

我想要一个数组中的随机数。如何避免随机生成WP7中的重复数字?

array like this int[] random={"1","2","3","4","5"}; 

我想随机取这些数字。它的工作正常但价值重复。 我不会重复的价值。我想要不重复相同的数字的随机数字。

我使用此代码来获得随机数,

Random randomnumber=new Rambom(); 
int number= randomnumber.Next(random.Length()); 

如果有谁知道告诉我的想法要做到这一点,

感谢。

回答

4

如果随机阵列是号码的来源,你可以为你让他们,因此完全移除重复删除的数字: -

List<int> random = new List<int>() { 1, 2, 3, 4, 5 }; 

    private void MyButton_Click(object sender, RoutedEventArgs e) 
    { 
     Random randomnumber = new Random(); 

     int number = random[randomnumber.Next(0, random.Count - 1)]; 

     random.Remove(number); 

     MyList.Items.Add(number); 
    } 
+0

注意:对于更多元素来说效率会很低。 – 2012-04-24 14:00:32

0

循环访问数组,看看是否已经添加了数字。如果你有,创建新的随机。然后再检查一次。

+0

INT数目减少阵列的尺寸= randomnumber.Next(random.Length()) ;这个代码循环5次,它会给出像这样1,1,4,4,2相同的值。我想要这样1,4,3,2,5随机没有重复相同的价值。 – Jeeva123 2012-04-24 11:58:01

0

我想从随机数组中删除已经选定的值。 所以你可以在你的“随机数组”中搜索“数字”并删除它。

1

保罗Diston soultion是够用了,但更多的号效率低下。生成随机唯一编号的一种简单方法是将它们添加到HashSet。代码片段:

 HashSet<int> hashSet = new HashSet<int>(); 

     for (int i = 0; i < 10; i++) 
     { 
      hashSet.Add(rand.Next(5)); 
     } 
     foreach (var item in hashSet.AsEnumerable()) //hashSet.ToList() to get list 
     { 
      Console.WriteLine(item); 
     } 

后来如果你想要随机数组的其他列表 - 随机播放它。最好的方法之一是Fisher-Yates shuffle。代码段:

public static void Shuffle<T> (Random rand, IList<int> list) 
{ 
    int n = list.Count; 
    while (n > 1) 
    { 
     int k = rand.Next(n--); 
     //swapping values 
     T temp = list[n]; 
     list[n] = list[k]; 
     list[k] = temp; 
    } 
} 

不幸的是,这里没有内置功能。

0

的高效的方法来避免重复仅仅是与阵列的最后一个元素以交换发现数,然后通过1