2012-04-24 71 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