2

As you know "for" can generate ordered number while looping. I want to make a loop but with unordered numbers. As an example of what I need, see this:

for (int i = 0; i < 15; i++)
{
    // Do something with "i"...
}

this will repeat and count from 0 to 14 sequentially but suppose that I want it to repeat and count randomly between 0 and 14 like this:

13, 2, 7, 0, 14, 4, 6, 1, 8, 3, 5, 15, 9, 10, 12, 11

How can I do it?

M Ahmadzadeh
  • 121
  • 7

2 Answers2

2

Generate a collection of sequential numbers and then shuffle them. The following uses OrderBy to do so:

Random r = new Random();
foreach(int i in Enumerable.Range(0, 15).OrderBy(_ => r.Next()))
{
    // Do something with "i"...
}

As @grek40 commented there are better ways than OrderByfor the shuffling but the idea is the same:

Gilad Green
  • 36,708
  • 7
  • 61
  • 95
0
var numbers = Enumerable.Range(0, 10).ToList();
var rnd =  new Random();
for (; numbers.Count != 0;)
{
    var currentNumber = numbers[rnd.Next(0, numbers.Count)];

    Console.WriteLine(currentNumber);

    numbers.Remove(currentNumber);
}

It will create a list with numbers from 0 to 10. Then wee choose a random number from our list. After we remove it so it won't be chosen again.