循环遍历列表并匹配多个条件

本文关键字:条件 遍历 列表 循环 | 更新日期: 2023-09-27 18:17:21

我正在尝试创建一个为测验评分的方法。如果问题只有一个正确答案,它可以工作得很好,但我很难处理多个正确答案。

我首先检查当前问题有多少个正确答案。如果它大于1,那么我需要一个方法来检查用户的答案是否与正确答案完全匹配。

所以,如果有一个问题有两个正确答案,而用户只勾选了其中一个,他就不会得到分数。

关于检查正确答案的数量是否与正确答案相匹配的方法有什么想法吗?

我认为LINQ会很适合这里,但我对它完全是一个新手。也许将所有正确答案添加到一个新列表并与。contains匹配将是一个解决方案?

类如下:

List<Question>
Question-Class
- List<Answers>
    -(string) AnswerText
    -(bool) CorrectAnswer
- List<string> UserAnswerToQuestionText

伪代码:

if (currentquestion has more than one correct answer)
if (UserAnswerText == correctAnswerX && UserAnswerText == correctAnswerY) 
nrofCorrectAnswers++;

循环遍历列表并匹配多个条件

您是否可以展示您的代码以获得更好的答案?

我想可能是这样的:

int correctAnswersCount = yourlist.Count(answer => answer.Contais(UserAnswerText));

应该可以使用linq

所以这取决于你如何建模你的问题和答案。

为你的问题创建一个类,然后为你的答案创建一个类像这样,你的问题类可以包含一个答案列表:

public class Question
{
    public int QuestionId {get; set;}
    public string QuestionText {get; set;}
    public List<Answer> Answers {get; set;
}
public class Answer
{
    public int AnswerId {get; set;}
    public int QuestionId {get; set;}
    public string AnswerText {get;set;}
}

问题和答案之间有关系。然后根据给出的答案检查你的答案:

var userAnswers = new List(Answer);
//populate your useranswers here
foreach(var question in Questions)
{
    var answersForQuestion = question.Answers.Select(a=>a.QuestionId == question.Id);
    if (userAnswers.FindAll(ua => ua.QuestionId == questionId).Length == question.Answers.Count())
    {
        //correct amount of answers. check for actual answers
        if (userAnswers.Any(ua => question.Answers.Contains(a=>a.Id == ua.Id))
    //correct answers made
    {
}

这个假设问题的答案是固定的(即选择题),如果他们已经输入了答案,可能会更棘手