1 (изменено: Lencore228, 2020-06-04 23:55:48)

Тема: AHK: Генерация топ-10 игроков из массива с именами и очками

Привет. У меня есть папка с .ini файлами, в них есть значения name и balance, которые содержат имя игрока и количество его очков соответственно. Игроков много, и нужно сделать рейтинг из 10 лучших игроков по очкам, получив готовый список такого вида:

Ваня - 12
Петя - 10
Вася - 8
Дима - 4
И так далее

Как я изначально это сделал: собирал список файлов, делал массив, в котором нечетные ячейки были именами, а четные - очками. Затем сравнивал каждую ячейку по очереди - от 1 места до 10, и потом получался нужный файл. Но я понимаю, что этот метод колхозный и нужно что-то поадекватнее.

Помогите, пожалуйста.

2

Re: AHK: Генерация топ-10 игроков из массива с именами и очками

При считывании значений из ini-файлов сразу формируете такой список:

Дима - 4
Ваня - 12
Вася - 8
Петя - 10

Потом сортируете таким образом:

list =
(
Дима - 4
Ваня - 12
Вася - 8
Петя - 10
)
Sort, list, F SortByBalance
MsgBox, % list

SortByBalance(a1, a2) {
   Loop 2
      RegExMatch(a%A_Index%, "\d+$", m%A_Index%)
   Return m1 < m2
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK: Генерация топ-10 игроков из массива с именами и очками

teadrinker

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

4

Re: AHK: Генерация топ-10 игроков из массива с именами и очками

list это просто текст, string. Отделить сколько-то строк можно через Loop (parse a string).

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5

Re: AHK: Генерация топ-10 игроков из массива с именами и очками

teadrinker

Сделал. Но сортировка почему-то работает неправильно. Сформировался такой список:

Вася - 4997
Петя - 1425
Сережа - 476000
Дима - 1000
Стас - 1015
Ваня - 1100
Костя - 1010

6 (изменено: teadrinker, 2020-06-05 17:41:04)

Re: AHK: Генерация топ-10 игроков из массива с именами и очками

Понял, в чём может быть проблема:

list := "Вася - 4997`r`nПетя - 1425`r`nСережа - 476000"
Sort, list, F SortByBalance
MsgBox, % list

SortByBalance(a1, a2) {
   Loop 2
      RegExMatch(a%A_Index%, "\d+$", m%A_Index%)
   Return m1 < m2
}

Измените функцию на такую:

SortByBalance(a1, a2) {
   Loop 2
      RegExMatch(a%A_Index%, "\d+(?=`r|$)", m%A_Index%)
   Return m1 < m2
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7

Re: AHK: Генерация топ-10 игроков из массива с именами и очками

teadrinker

Большое спасибо