在 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 之间数字的列表。然后我们从列表中选择一个随机数。删除后不会再被选中
如您所知,"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 之间数字的列表。然后我们从列表中选择一个随机数。删除后不会再被选中