Как сделать вывод ключа и значения из словаря в метке? - PullRequest
0 голосов
/ 31 мая 2019

Существует 10 меток и словарь, который состоит из ключевого имени игрока, метки-записи (в секундах).

Первые 5 меток сделаны под именами (то есть кактаблица записей), а остальные 5 меток под результатами.

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

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

10 ярлыков в таблице расположены так (я пишу номера ярлыков):

label18 label28

label19 label29

label20 label30

label21 label31

label22 label32

Существует также код для создания словаря (это может быть полезно):

private static Dictionary<string, int> AllNames()
    {
        return File
          .ReadLines(@"C:\Users\HP\Desktop\картинки\results.txt")
          .Where(line => string.IsNullOrWhiteSpace(line))
          .Select(item => item.Split(' '))
          .ToDictionary(items => items[0],
                        items => int.Parse(items[1]));
    }

Это все должно произойти, нажав на кнопку: «Показать рейтинг»,который находится в этой форме.

1 Ответ

2 голосов
/ 31 мая 2019

При условии, что вы хотите поместить имена в label18..labe22, а значения в label28..label32, простой Linq должен сделать

 using System.Linq;

 ...

 private void updateRatingLabels() {
   var tops = AllNames()
     .OrderBy(pair => pair.Value)                      // less seconds - better rank
     .ThenBy(pair => pair.Key, StringComparer.Ordinal) // On tie, use names
     .Take(5)                                          // Top 5 or less  
     .ToArray();

   // Clear all the labels
   for (int i = 18; i <= 22; ++i)
     Controls.Find($"label{i}", true).First().Text = "";

   for (int i = 28; i <= 32; ++i)
     Controls.Find($"label{i}", true).First().Text = "";

   // Put best results
   for (int i = 0; i < tops.Length; ++i) {
     Controls.Find($"label{i + 18}", true).First().Text = tops[i].Key;
     Controls.Find($"label{i + 28}", true).First().Text = tops[i].Value.ToString();
   }
 }

Тогда

  private void buttonShow_Rating_Click(object sender, EventArgs e) {
    updateRatingLabels();  
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...