2017-10-20 9 views
2

"for"가 루핑하는 동안 순서 번호를 생성 할 수 있음을 알고 있습니다. 루프를 만들고 싶지만 순서가없는 숫자를 사용하고 싶습니다. 내가 무엇을 필요 예를 들어,이 참조 :C에서 순서가없는 순서로 루프를 반복하고 계산하십시오.

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

이 반복 0에서 14 순차적으로 계산하지만 나는 그것을 반복하고 다음과 같이 0에서 14 사이에 무작위로 계산한다고 가정합니다

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

어떻게하면됩니까?

+0

숫자 목록을 만들어 셔플 한 다음 다시 반복하십시오. – BugFinder

+0

셔플 참조 [this] (https://stackoverflow.com/a/110570/4685428) 대답 –

답변

2

일련 번호의 모음을 생성 한 다음 임의로 섞습니다. 다음 사용 OrderBy 그렇게하기 : @ grek40으로

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

댓글을 달았가 셔플에 대한 OrderBy보다 더 나은 방법이 있지만 아이디어는 동일합니다 :

+0

https://stackoverflow.com/questions/ 1287567/is-using-random-and-orderby-a-good-shuffle- 알고리즘 – grek40

+0

@ grek40 - 동의하지만 그것에 대해 편집 할 것입니다. 그러나 여기에서 중요한 부분은 그렇게하는 것입니다. :) –

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); 
} 

숫자가 0에서 10 사이의 목록을 만듭니다. 우리 목록에서 임의의 숫자를 찾으십시오. 우리가 그것을 제거한 후에 그것은 다시 선택되지 않을 것입니다.