从表中获取随机项目,无需重复
本文关键字:项目 获取 随机 | 更新日期: 2023-09-27 17:55:16
我正在创建一个应用程序,我必须在其中显示列表中的问题而不重复。
public IEnumerable<dynamic> GetQue()
{
var result = obj.tblQuestions
.OrderBy(r => Guid.NewGuid())
.Select(o => new { o.id, o.Question, o.Opt1, o.Opt2, o.Opt3, o.Opt4 })
.Take(1);
return result;
}
目前我收到一个随机问题,但重复。如何在不重复的情况下获得记录?
正如我在评论中所说,您可以使用随机获取一个一个元素,然后从列表中删除所选元素。重复此操作,直到列表为空。
我并没有给你的案例所需的代码,你仍然需要根据你的类来调整它,但这是它应该尊重的原则:
var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int randomId;
Random rand = new Random();
if (list.Count != 0)
{
randomId = rand.Next(list.Count);
var randomElement = list[randomId];
list.RemoveAt(randomId);
return randomElement;
}
这会从整数列表中获取随机元素,考虑到您的列表是类旁边的数据,当然不是您应该更新的数据。
public ActionResult GetNextQuestion(int[] prevs = null)
{
var que = GetQue(prevs);
var ids = new int[] { que.id};
if(prevs != null)
ids = ids.Concat(prevs);
ViewBag.list = ids;
return View(que);
}
public dynamic GetQue(int[] prevs = null)
{
using (var obj = new Db())
{
var result = obj.tblQuestions;
if(prevs != null)
result = result.Where(e => !prevs.Contains(e.id));
result = result.OrderBy(r => new Guid())
.Select(o => new { o.id, o.Question, o.Opt1, o.Opt2, o.Opt3, o.Opt4 });
return result.First();
}
}
来源:如何在 C# 中使用随机类来避免数字重复?
如果在循环时将项目添加到列表中,则可以检查列表以查看其是否已添加。我是菜鸟,所以我不能真正为你编写代码,但想法就在那里。为已经循环浏览的条目创建一个单独的列表,然后执行 if 语句以在执行之前检查下一个条目是否在列表中。
我会在评论中这样做,但我没有 50 次代表,所以我无法启动评论链。