2016-11-10 2 views
0

Im пытается создать метод, который оценивает викторину. Он отлично работает, если в вопросе викторины есть только один правильный ответ, но мне сложно справляться с несколькими правильными ответами.Цитирование по списку и сопоставление нескольких условий

Сначала я проверяю, сколько правильных ответов отвечает на текущий вопрос. Если его более 1, чем мне нужен метод, который проверяет, соответствуют ли пользователи ответы на правильные ответы.

Итак, если у вас есть вопрос с 2 правильными ответами, и пользователь проверяет только один из них, он не получает оценку.

Любые идеи по методу проверки того, что количество ответов, которые являются правильными, соответствуют правильным ответам?

Я думаю, что 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++; 

ответ

0

Можете ли вы показать код для лучшего ответа?

Я думаю, что это может быть что-то вроде этого:

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

Должно быть в состоянии сделать это с помощью 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 
    { 
} 

Это предполагает фиксированные ответы на вопросы (то есть множественный выбор), если они набрали в ответ, может быть более сложным

+0

Спасибо за ответ , Это, безусловно, шаг вперед! :-) Наверху мой класс выглядит так, поэтому ответы пользователей находятся в списке строк, вы все равно можете их перебирать с помощью linq? –

+0

Да, вы можете просто изменить Id для текста. Вам нужно будет сделать некоторое форматирование и проверку, так как строки меняются. –

Смежные вопросы