Генерация случайных вопросов из текстового файла - C # - PullRequest
2 голосов
/ 08 ноября 2010

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

Моя идея заключалась в том, чтобы хранить большую коллекцию вопросов и там соответствующие ответы в текстовом файле:

What colour is an Strawberry|Red
How many corners are there on a Triangle|Three

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

Я придумал какой-то псевдокод с подходом, который, я думаю, был бы полезен, и ищу некоторый вклад в то, как его можно улучшить:

Random rand = new Random();
int line;
string question,answer;

for(int i = 0; i < 20; i++)
{
   line = rand.Next();
   //Read question at given line number to string
   //Read answer at given line number to string
   //Copy question and answer to collection
}

С точки зрения реализации идеи я не уверен, как определить номер строки для чтения, а также как разбить всю строку и прочитать обе части по отдельности. Если нет лучшего способа, чтобы мои мысли вручную вводили номер строки в текстовом файле с последующим «|» каждая строка выглядит так:

1|What colour is an Strawberry|Red
2|How many corners are there on a Triangle|Three

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 08 ноября 2010

Вы не хотите отображать вопросы дважды, верно?

Random random = new Random();
var q = File.ReadAllLines("questions.txt")
    .OrderBy(x=>random.Next())
    .Take(20)
    .Select(x=>x.Split('|'))
    .Select(x=>new QuestionAndAnswer(){Question=x[0],Answer=x[1]});
2 голосов
/ 08 ноября 2010

Почему бы не прочитать весь файл в массив или список, используя ReadLine , а затем обратиться к случайному индексу в пределах массива, чтобы извлечь строку вопроса / ответа, а не читать изтекстовый файл, если вы хотите задать вопрос.

Что касается его анализа, просто используйте Split , чтобы разбить его в разделителе | (и убедитесь, что ни один из вопросов не имеет | ввопрос по какой то причине).Это также позволит вам сохранить некоторые неправильные ответы с вопросом (просто скажите, что первый всегда правильный, а затем, когда вы выводите его, вы можете рандомизировать порядок).

...