Как бы я пошел о сортировке текстового файла, который содержит имена и оценки в числовом порядке (стиль таблицы лидеров) - PullRequest
0 голосов
/ 22 мая 2019

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

Текстовый файл форматирует записи как «Оценка - Имя» (без кавычек) Одна запись в строке

12 - Daniel
14 - Greg
19 - Ben
6 - Samuel

По сути, он должен преобразовать текстовый файл, который содержит текст, показанный выше, в ...

19 - Ben
14 - Greg
12 - Daniel
6 - Samuel

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

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

        static void Leaderboard()
        {
            Console.Clear(); //Clears the console
            Console.WriteLine("======================================");
            Console.WriteLine("Quiz Leaderboard!");
            Console.WriteLine("Shown below are the top 10 users");
            Console.WriteLine("======================================");

            StreamReader lbfile = new StreamReader("../../../../leaderboard.txt");
        }

После сортировки я хочу распечатать результаты 10 лучших пользователей в консоли.

Редактировать: Это мой первый пост в StackOverflow, я надеюсь, что все сделал правильно, я рад предоставить любую дополнительную информацию, которая поможет в создании решения.

1 Ответ

0 голосов
/ 22 мая 2019

Вы можете использовать следующее, учитывая, что могут быть дубликаты, это не аккуратно, так как у меня было всего несколько минут

string[] lines = System.IO.File.ReadAllLines(@"C:\TextFile1.txt");

        var dictionary = new Dictionary<int, List<string>>();

        foreach (var line in lines)
        {
            string[] vals = line.Split("-");

            var result = Convert.ToInt32(vals[0].Trim());
            var name = vals[1].Trim();

            if (!dictionary.ContainsKey(Convert.ToInt32(vals[0].Trim())))
            {
                dictionary.Add(result, new List<string> { new string(name) });
            }
            else
            {
                var duplicate = dictionary.GetValueOrDefault(result);
                duplicate.Add(name);
            }

        }

        var orderedList = dictionary.OrderByDescending(r => r.Key);


        Console.Clear(); //Clears the console
        Console.WriteLine("======================================");
        Console.WriteLine("Quiz Leaderboard!");
        Console.WriteLine("Shown below are the top 10 users");
        Console.WriteLine("======================================");

        foreach (var keyValuePair in orderedList)
        {

            Console.WriteLine(" Result = " + keyValuePair.Key);

            foreach (var val in keyValuePair.Value)
            {
                Console.WriteLine("     Name: " + val);
            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...