重复并在C#中的无序序列中计数一个循环
问题描述:
如您所知,“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
我该怎么办?
答
生成连续数字的集合,然后洗牌。以下用途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 - 我同意并将编辑它,但这里的主要部分是这样做的能力:) –
答
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的列表。从我们的列表中随机选择一个数字。我们删除它后,它不会再被选中。
创建一个数字列表,随机播放它们,然后遍历它们 – BugFinder
有关洗牌,请参见[this](https://stackoverflow.com/a/110570/4685428)回答 –