Сортировка на Lua
Чет искал в гугле и не нашел конкретного моего случая либо так искал. короче примерно дано
Table={}
Table["Petia"]=2
Table["Vasia"]=1
Table["Jenia"]=2
Table["Tusha"]=9
Table["Pitarda"]=3
Table["Kruk"]=1
нужно отсортировать чтоб получилось
Table["Tusha"]=9
Table["Pitarda"]=3
Table["Jenia"]=2
Table["Petia"]=2
Table["Kruk"]=1
Table["Vasia"]=1
Не могу понять как сделать сортировку. И как нумеруются вот эти вот "Petia""Vasia" в массиве ?Случайно не по счету 0-1-2....n ? Просто суть в том чтоб потом вернуть их значения этих петей васей и сравнить с другими петями женями по счету! И узнать самого большого посчету! через if then end

Без ответа.


Просмотров: 154

prog #1 - 2 месяца назад 1
У вас строки используются в качестве ключей в таблице. Такое сортировке не подлежит потому как ассоциативные массивы не гарантируют порядок элементов.
Их можно перебрать через цикл по pairs. Для поиска самого большого значения этого хватит, сортировка не нужна для этого.
Если нужна именно сортировка - нужна таблица представляющая собой обычный нумерованный массив, в ячейках которого будут лежать таблицы с именами и другими значениями - такую конструкцию можно сортировать потому как обычный массив знает порядок элементов.
Castiel #2 - 2 месяца назад (отредактировано ) 0
prog:
У вас строки используются в качестве ключей в таблице. Такое сортировке не подлежит потому как ассоциативные массивы не гарантируют порядок элементов.
Их можно перебрать через цикл по pairs. Для поиска самого большого значения этого хватит, сортировка не нужна для этого.
Если нужна именно сортировка - нужна таблица представляющая собой обычный нумерованный массив, в ячейках которого будут лежать таблицы с именами и другими значениями - такую конструкцию можно сортировать потому как обычный массив знает порядок элементов.
Бро как тогда найти самое высокое значение )))? именно через pairs! и как именно вывести самый высокий! чет пробую никак не выходит!
prog #3 - 2 месяца назад 1
Castiel, перебор ассоциативного массива через pairs выглядит так
 for key,value in pairs(t) do
В переменную key по очереди будет записан каждый ключ из таблицы t а в value - каждое значение.
А поиск самого большого значения в массиве... Гугл в помощь, это простейшая задача, одинаковая почти в любом языке.
Castiel #4 - 2 месяца назад (отредактировано ) 0
prog:
Castiel, перебор ассоциативного массива через pairs выглядит так
 for key,value in pairs(t) do
В переменную key по очереди будет записан каждый ключ из таблицы t а в value - каждое значение.
А поиск самого большого значения в массиве... Гугл в помощь, это простейшая задача, одинаковая почти в любом языке.
А потом их сравнить можно будет по ключу типа if "Petia" then elseif "Vasia" then end ? или самое большое занести в отдельную локалку и потом сравнить ??
prog #5 - 2 месяца назад 1
Castiel, смотря чего добиться в итоге надо - все можно, от конкретной задачи зависит, а я не экстрасенс чтобы угадать. Но поиск максимального значения в массиве обычно и так использует переменную объявленную до цикла чтобы хранить это значение, или индекс этого значения или ключ или несколько переменных.
Castiel #6 - 2 месяца назад (отредактировано ) 0
prog:
Castiel, смотря чего добиться в итоге надо - все можно, от конкретной задачи зависит, а я не экстрасенс чтобы угадать. Но поиск максимального значения в массиве обычно и так использует переменную объявленную до цикла чтобы хранить это значение, или индекс этого значения или ключ или несколько переменных.
короче я просто затупил, я ключи пронумеровал и отсортировал, суть в том, что мне нужно было узнать именно ключ самого большого числа! и потом еще раз сравнить со вторым по счету после сортировки! то есть
table[0]=3
table[1]=10
table[2]=5
table[3]=4
table[4]=1
итог:
table[1]=10
table[2]=5
table[3]=4
table[0]=3
table[4]=1
вот примерно так должно быть и узнать именно ключ самого высокго числа в этом случае table[1]
Просто я х3 может на луа есть какие то фичи этого)
prog #7 - 2 месяца назад (отредактировано ) 1
Замена строковых ключей числовыми мало чем поможет - теперь это просто нумерованный массив целых чисел, который можно отсортировать, но результат сортировки будет немного другим и явно не тем который нужен.
table[0]=10
table[1]=5
table[2]=4
table[3]=3
table[4]=1
Впрочем, для получения двух верхних элементов массива тоже не нужна полная сортировка массива, хватит все того-же одного прохода по массиву, но если для получения верхнего элемента нужна минимум одна переменная, то для получения двух верхних нужно минимум две переменных.
Castiel #8 - 2 месяца назад (отредактировано ) 0
prog:
Замена строковых ключей числовыми мало чем поможет - теперь это просто нумерованный массив целых чисел, который можно отсортировать, но результат сортировки будет немного другим и явно не тем который нужен.
table[0]=10
table[1]=5
table[2]=4
table[3]=3
table[4]=1
Впрочем, для получения двух верхних элементов массива тоже не нужна полная сортировка массива, хватит все того-же одного прохода по массиву, но если для получения верхнего элемента нужна минимум одна переменная, то для получения двух верхних нужно минимум две переменных.
Мне нужно узнать просто ключ самого высого числа! А потом по этому ключу проверить через if then end Вот и все ) изначально просто не правильно подошел к этому..
prog #9 - 2 месяца назад 1
Castiel, окей. И что мешает это сделать? Для этого нужна одна переменная (можно две - одну для ключа и одну для значения), один цикл, один if внутри цикла и пара присвоений переменной. Для нумерованного массива цикл по индексу, для ассоциативного - по ключам через pairs.
Castiel #10 - 2 месяца назад 2
prog:
Castiel, окей. И что мешает это сделать? Для этого нужна одна переменная (можно две - одну для ключа и одну для значения), один цикл, один if внутри цикла и пара присвоений переменной. Для нумерованного массива цикл по индексу, для ассоциативного - по ключам через pairs.
Так я уже сделал, написал просто что изначально затупил и не првильно подешел к этому )))
local key_count=0
local j=COUNT[0]
for i=1,6 do
if j<COUNT[i]then
j=COUNT[i]
key_count=i
end
end

так или чет не то ?
prog #11 - 2 месяца назад 0
Castiel, да, типа того.
А если немного доработать - можно и второе сверху значение найти в том-же цикле, если оно еще нужно.
Castiel #12 - 2 месяца назад 0
prog:
Castiel, да, типа того.
А если немного доработать - можно и второе сверху значение найти в том-же цикле, если оно еще нужно.
спс бро как тебе плюсик поставить )