C# 使用Fisher-Yates Shuffle的随机XML问题

C# 使用Fisher-Yates Shuffle的随机XML问题,c#,shuffle,C#,Shuffle,我正在做一个小测验/琐事游戏,将问题存储在XML文件中,它会得到一个随机问题。一切都很好,但我想保持随机性,但在每个问题都显示出来之前,不要显示相同的问题 public struct Question { public string questionText; public string answerA; public string answerB; public string answerC; public string answerD; public int correctAn

我正在做一个小测验/琐事游戏,将问题存储在XML文件中,它会得到一个随机问题。一切都很好,但我想保持随机性,但在每个问题都显示出来之前,不要显示相同的问题

 public struct Question {
 public string questionText;
 public string answerA;
 public string answerB;
 public string answerC;
 public string answerD;
 public int correctAnswerID;
 }

[XmlRoot("QuestionsRoot")]
public class QuestionData {
[XmlArray("Questions")]
[XmlArrayItem("Question")]
public List<Question>questions = new List<Question>();

 public static QuestionData LoadFromText(string text) {
 try {
     XmlSerializer serializer = new XmlSerializer(typeof(QuestionData));            
     return serializer.Deserialize(new StringReader(text)) as QuestionData;
 } catch (Exception e) {
     UnityEngine.Debug.LogError("Exception loading question data: " + e);
     return null;
 }
}

按照以下思路做一些事情:

创建另一个包含可用问题的列表-将其初始化到所有问题列表中:

 questionData = QuestionData.LoadFromText(questionDataXMLFile.text)

 var available = new List<Question>(questionData.question);
 ...
 }

 public Question GetNextQuestion()
 {
     if (available.Count == 0)
        available.AddRange(questionData.question);

    q = Random.Range(0, available.Count);
    currentQuestion = available[q];
    available.RemoveAt(q);

    return currentQuestion;
 }
questionData=questionData.LoadFromText(questionDataXMLFile.text)
可用变量=新列表(questionData.question);
...
}
公共问题GetNextQuestion()
{
如果(可用。计数==0)
可用.AddRange(questionData.question);
q=随机范围(0,可用.Count);
currentQuestion=可用[q];
可用。RemoveAt(q);
返回问题;
}

如果你问如何实现fisher yates,这个网站和维基百科上有很多例子。如果您确实尝试过实现它,我们需要查看该代码,您需要解释它的错误。@Blorgbeard我尝试了for(int I=1;IQuestion x而不是
string x
。另外,为什么不在原始帖子中发布该代码和错误?为了得到帮助,你需要解释你的实际问题。请注意,您可以删除您的帖子!好的,我会的。谢谢你Op提到了shuffle,但这不是。不过,这仍然有效。
 questionData = QuestionData.LoadFromText(questionDataXMLFile.text)

 var available = new List<Question>(questionData.question);
 ...
 }

 public Question GetNextQuestion()
 {
     if (available.Count == 0)
        available.AddRange(questionData.question);

    q = Random.Range(0, available.Count);
    currentQuestion = available[q];
    available.RemoveAt(q);

    return currentQuestion;
 }