2017-10-20 350 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这样做:

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

作为@ grek40评论有比OrderBy的洗牌更好的方法,但这个想法是一样的:

+0

https://stackoverflow.com/questions/ 1287567/is-using-random-and-order by-a-good-shuffle-algorithm – 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的列表。从我们的列表中随机选择一个数字。我们删除它后,它不会再被选中。