先前未选择的随机数

Nic*_*ckP 0 c#

以下代码部分按我的意愿工作

for (int i = 1; i <= practicehistory.TotalNumQuestions; i++)
{
    query = from a in db.Questions
            where a.CategoryId == practicehistory.CategoryId
            orderby a.QuestionId
            select a;
    randomNumber = random.Next(1, count + 1);
    int qNum = query.Skip(randomNumber - 1).First().QuestionId;
    asked.QuestionId = qNum;
    asked.OrderAsked = i;
    db.AskedHistories.Add(asked);
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

但是,我偶尔会遇到随机数与之前的for循环运行中的随机数相同的情况.我想知道是否有人有一个优雅的解决方案,我怎么能确保只生成一个比以前没有生成过的随机数?我正在考虑填充一个数组并检查它,但这似乎是多余的!

Mar*_*ins 7

这样做的一种方式是生成可能值的数组(例如,整数1到N的数组),然后对它们进行混洗,然后根据需要迭代所得到的混合值.如果您对"通过示例"进行编码感兴趣,快速Google搜索会产生Fisher-Yates shuffle的几个C#实现.