Тема: AHK: Сортировка массива
Здравствуйте, уважаемые форумчане. Недавно написал код для сортировки массива от меньшего значения к большему. Но мне кажется что мой код слишком большой и его можно в разы упростить. По этому обращаюсь к вам, к более опытным кодерам.
Вариант моей сортировки:
global ArrayLEADERS := Object()
global ArrayTopLeaders := Object()
ArrayLEADERS[x := "Qnton"] := 5
ArrayLEADERS[x := "Wnton"] := 6
ArrayLEADERS[x := "Enton"] := 12
ArrayLEADERS[x := "Rnton"] := 1
ArrayLEADERS[x := "Tnton"] := 22
ArrayLEADERS[x := "Ynton"] := 5
ArrayLEADERS[x := "Unton"] := 22
LastMaxPoint := 0
LastMaxName := ""
LastListArray := ""
CountPlayers := 0
CountListLeaders := 0
for name, point in ArrayLEADERS {
if(point > LastMaxPoint) {
LastMaxPoint := point
LastMaxName := name
}
}
LoopLastMaxPoint := LastMaxPoint + 1
Loop % LastMaxPoint {
LoopLastMaxPoint -= 1
for name, point in ArrayLEADERS {
if(LoopLastMaxPoint = point) {
LastListArray .= name "@"
}
CountPlayers := A_Index
}
}
Loop, Parse, LastListArray, `@
LastListDescArray := trim(A_LoopField "@" LastListDescArray, "@")
if(CountPlayers >= 5)
CountListLeaders := 5
else
CountListLeaders := CountPlayers
Loop, Parse, LastListDescArray, `@
{
ArrayTopLeaders[ArrayLEADERS[y := A_LoopField], z := A_LoopField] := ArrayLEADERS[x := A_LoopField]
if(CountListLeaders = A_Index)
break
}
for key, val in ArrayTopLeaders {
for name, point in val {
msgbox % CountListLeaders " место занял " name ", он набрал " point " баллов."
CountListLeaders -= 1
}
}
Полное описание скрипта: Берет массив в ключе которого находится имя, а в значении кол-во очков (число). Дальше идет сортировка от меньшего значения к большему (это число хранится в значении ключа). Но, мне нужно вывести не более 5 значений.
Если есть варианты как-то упростить код (уменьшить его) напишите, пожалуйста. Очень поможете. Жду ваших ответов и вариантов.