2012-04-24 15 views
1

乱数を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

サイドノート:それ以上の要素では非効​​率的です。 –

0

配列をループして、すでに番号を追加しているかどうかを確認してください。もし持っていたら、新しいランダムを作成してください。その後、再度確認してください。

+0

INT番号= randomnumber.Next(random.Length())によって、配列のサイズを縮小するだけです;このコードは5回ループして、この1,1,4,4,2のような同じ値を返します。私は同じ値を繰り返すことなく、ランダムに1,4,3,2,5のようにしたい。 – Jeeva123

0

ランダム配列から既に選択されている値を削除することを考えています。 "random array"で "number"を検索して削除することができます。ランダムな配列は、数字のソースがある場合は、したがって、完全に重複を削除し、それらを得るよう

1

ポールDistonのsoultionは、より多くの数字で十分です非効率的です。ランダムな一意の数値を生成する簡単な方法の1つは、それらを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); 
     } 

その後、ランダム配列の別のリストが必要な場合はシャッフルします。それを行う最善の方法の1つは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

関連する問題