嵌套列表或任何其他结构? C#

时间:2017-02-11 17:49:07

标签: c# list nested-lists

我正在做一个测验类型的游戏,我正在尝试决定处理它的最佳结构。

10个或更多问题,每个问题都会有多个答案,所有问题都是错误的。

用户将从列表中随机选取的4个可见答案(单选按钮)中选择正确的答案。我们将确保始终能够找到正确的答案。

列表中将包含多个子列表(每个子列表一个问题和多个答案)

在这些子列表中,第一个位置[0]将是问题,其余[1 ...]将是答案。

我的问题是,嵌套列表是正确的方法吗?我在想这个吗?

提前致谢!

4 个答案:

答案 0 :(得分:2)

我可能会上课。

public class Question {
   public string TheQuestion;
   public string[] TheAnswers; //first should be correct answer
   public Question(string quest, string[] ans){
      TheQuestion = quest;
      TheAnswers = ans;
   }
}

然后你可以提出你想要的所有问题List<Question> Questions并从中提取。设置答案时,总是让第一个数组值成为正确的答案,然后您可以随机化顺序以显示答案。

List<Question> Questions = new List<Question>();
string q = "Is stackoverflow the best?";
string[] a = new string {"Yes!", "No.", "Probably Not" };
Question q1 = new Question(q, a);
Questions.Add(q1);

答案 1 :(得分:1)

对于绑定目的等,我建议使用自定义类列表;如:

var questionList = new List<QandA>();

///...

public class QandA
{
    public string Question { get; set; }
    public string Answer1 { get; set; }
    public string Answer2 { get; set; }
    public string Answer3 { get; set; }
    public string Answer4 { get; set; }
    internal int CorrectIndex { get; set; }
}

答案 2 :(得分:1)

这里有一些很好的答案,但是我想把事情组织起来有点不同。而不是让答案1总是正确的。您可以像我在下面那样进行布局,以便在随机化多项选择方面提供更多的灵活性,并在答案正确时更容易进行比较。

     for (String path : regPath) {
                    if (WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, path) == null) {
                        System.out.println(path + " was null.");
                        continue;
                    }

                    List<String> ls = WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, path);
                    if (ls == null || ls.isEmpty()) {
                        return;
                    } else {
                        for (String sub : ls) {
                            sub = path + "\\" + sub;
                            System.out.println(sub);
                            if (WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, sub) == null) {
                                System.out.println(path + " was null.");
                                continue;
                            }
                            ls = WinRegistry.readStringSubKeys(WinRegistry.HKEY_CURRENT_USER, sub);
                            if (ls == null || ls.isEmpty()) {
                                return;
                            } else {
                                for (String subKey : ls) {
                                    subKey = sub + subKey;
                                    System.out.println(subKey);
                                }
                            }

                            System.out.println(sub);
                        }
                    }
                }

答案 3 :(得分:0)

“列表清单”可以起作用,但可能非常有限。你没有很多机会来组织你的程序逻辑。

相反,您应该创建类来表示模型中的“事物”。寻找重要的名词:测验,问题和答案。

class Quiz {
   List<Question> mQuestions = new List<Question>();

   // implement functionality that is relevant at the Quiz level
}

class Question {
   string mQuestionText;
   List<Answer> mAnswers = new List<Answer>();       

   // implement functionality that is relevant at the Question level
}

class Answer {
   string mAnswerText;
   bool mIsCorrect;

   // implement functionality that is relevant at the Answer level
}