2016-10-09 19 views
0
int Min = 0; 
int Max = 20; 
int[] test2 = new int[5]; 

Random randNum = new Random(); 
for (int i = 0; i < test2.Length; i++) 
{ 
    test2[i] = randNum.Next(Min, Max); 
} 

0から20までの数字が配列内で同じでないことを確認するにはどうすればよいですか?たとえば、配列の中に5の2倍の数字を入れたくないのです。繰り返すことなくランダムなintのリストを作成する方法はありますか?

リストの作成方法は?または配列が良いですか?

+0

に整数0をソートする通常の方法で試したしましたか?それは繰り返されますか? – Rahul

+0

'Max'に' Min'をつけて 'List 'を記入してください。次に、[ランダム化リスト](http://stackoverflow.com/questions/273313/randomize-a-listt)。それで 'Take()'いくつかの項目。 –

+1

[試してみますか?](https://www.google.com/search?q=c%23+How+can+I+create+a+List+of+random+int+numbers+without+ – TaW

答えて

3

またはLINQを使用しています。 (Enumerable.RangeとMinとMaxの間の配列を生成することにより):あなたが一連の特定の番号を選択したい場合は

var rnd = new Random(); 
var res = Enumerable.Range(Min, Max - Min + 1).OrderBy(x => rnd.Next()).ToList(); 

そして、あなたはTakeメソッドを使用することができます。このように:

var res = Enumerable.Range(Min, Max - Min + 1).OrderBy(x => rnd.Next()).Take(5).ToList(); 
+1

この方法は多分256MBのメモリを必要とせず(すべての可能な整数の配列をストロークさせるなど)、生成された重複を無視する任意の方法とは異なり終了することが保証されます。 – starlight54

5

最大長の配列を作成し、0からMaxの数字を挿入します。次に、ランダムアルゴリズムを使用して配列の1つの要素を選択します(おそらくmod(Max-selectedElementsNumber))。配列から要素を削除した後。完了しました。

2

HashSet<int>を使用できます。重複は許可されません。

int Min = 0; 
int Max = 20; 
var test2 = new HashSet<int>(); 

Random randNum = new Random(); 
while(test2.Count < 5) 
{ 
    test2.Add(randNum.Next(Min, Max)); 
} 

またLINQをランダム化することができます。

int Min = 0; 
int Max = 20; 

Random randNum = new Random(); 

var test2 = Enumerable.Range(Min, Max - Min + 1) 
         .OrderBy(x => randNum.Next()) 
         .Take(5) 
         .ToArray(); 
0

重複した番号を取得した場合は、引き続き別の乱数を取得してください。あなたは

int Min = 0; 
int Max = 20; 
int[] test2 = new int[5]; 

Random randNum = new Random(); 
for (int i = 0; i < test2.Length; i++) 
{ 
    int r; 
    do 
    { 
     r = randNum.Next(Min, Max); 
    } while (test2.Contains(r)); 
    test2[i] = r; 
} 
0

これは19

  List<KeyValuePair<int, int>> numbers = new List<KeyValuePair<int, int>>(); 

      Random randNum = new Random(); 
      for (int i = 0; i < 20; i++) 
      { 
       numbers.Add(new KeyValuePair<int,int>(i, randNum.Next())); 
      } 
      numbers = numbers.OrderBy(x => x.Value).ToList(); 
      Console.WriteLine(string.Join(",", numbers.Select(x => x.Key).ToArray())); 
      Console.ReadLine(); 
関連する問題