在 C# 中重复和计算无序序列中的循环

repeat and count a loop in an unordered sequence in C#

如您所知,"for" 可以在循环时生成有序数。我想做一个循环,但数字是无序的。作为我需要的示例,请参见:

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 更好的洗牌方法,但想法是相同的:

  • Is using Random and OrderBy a good shuffle algorithm?
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 之间数字的列表。然后我们从列表中选择一个随机数。删除后不会再被选中