Чет искал в гугле и не нашел конкретного моего случая либо так искал. короче примерно дано
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

Принятый ответ

У вас строки используются в качестве ключей в таблице. Такое сортировке не подлежит потому как ассоциативные массивы не гарантируют порядок элементов.
Их можно перебрать через цикл по pairs. Для поиска самого большого значения этого хватит, сортировка не нужна для этого.
Если нужна именно сортировка - нужна таблица представляющая собой обычный нумерованный массив, в ячейках которого будут лежать таблицы с именами и другими значениями - такую конструкцию можно сортировать потому как обычный массив знает порядок элементов.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
24
5 лет назад
1
У вас строки используются в качестве ключей в таблице. Такое сортировке не подлежит потому как ассоциативные массивы не гарантируют порядок элементов.
Их можно перебрать через цикл по pairs. Для поиска самого большого значения этого хватит, сортировка не нужна для этого.
Если нужна именно сортировка - нужна таблица представляющая собой обычный нумерованный массив, в ячейках которого будут лежать таблицы с именами и другими значениями - такую конструкцию можно сортировать потому как обычный массив знает порядок элементов.
Принятый ответ
0
8
5 лет назад
Отредактирован Castiel
0
prog:
У вас строки используются в качестве ключей в таблице. Такое сортировке не подлежит потому как ассоциативные массивы не гарантируют порядок элементов.
Их можно перебрать через цикл по pairs. Для поиска самого большого значения этого хватит, сортировка не нужна для этого.
Если нужна именно сортировка - нужна таблица представляющая собой обычный нумерованный массив, в ячейках которого будут лежать таблицы с именами и другими значениями - такую конструкцию можно сортировать потому как обычный массив знает порядок элементов.
Бро как тогда найти самое высокое значение )))? именно через pairs! и как именно вывести самый высокий! чет пробую никак не выходит!
1
24
5 лет назад
1
Castiel, перебор ассоциативного массива через pairs выглядит так
 for key,value in pairs(t) do
В переменную key по очереди будет записан каждый ключ из таблицы t а в value - каждое значение.
А поиск самого большого значения в массиве... Гугл в помощь, это простейшая задача, одинаковая почти в любом языке.
0
8
5 лет назад
Отредактирован Castiel
0
prog:
Castiel, перебор ассоциативного массива через pairs выглядит так
 for key,value in pairs(t) do
В переменную key по очереди будет записан каждый ключ из таблицы t а в value - каждое значение.
А поиск самого большого значения в массиве... Гугл в помощь, это простейшая задача, одинаковая почти в любом языке.
А потом их сравнить можно будет по ключу типа if "Petia" then elseif "Vasia" then end ? или самое большое занести в отдельную локалку и потом сравнить ??
1
24
5 лет назад
1
Castiel, смотря чего добиться в итоге надо - все можно, от конкретной задачи зависит, а я не экстрасенс чтобы угадать. Но поиск максимального значения в массиве обычно и так использует переменную объявленную до цикла чтобы хранить это значение, или индекс этого значения или ключ или несколько переменных.
0
8
5 лет назад
Отредактирован Castiel
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 может на луа есть какие то фичи этого)
1
24
5 лет назад
Отредактирован prog
1
Замена строковых ключей числовыми мало чем поможет - теперь это просто нумерованный массив целых чисел, который можно отсортировать, но результат сортировки будет немного другим и явно не тем который нужен.
table[0]=10
table[1]=5
table[2]=4
table[3]=3
table[4]=1
Впрочем, для получения двух верхних элементов массива тоже не нужна полная сортировка массива, хватит все того-же одного прохода по массиву, но если для получения верхнего элемента нужна минимум одна переменная, то для получения двух верхних нужно минимум две переменных.
0
8
5 лет назад
Отредактирован Castiel
0
prog:
Замена строковых ключей числовыми мало чем поможет - теперь это просто нумерованный массив целых чисел, который можно отсортировать, но результат сортировки будет немного другим и явно не тем который нужен.
table[0]=10
table[1]=5
table[2]=4
table[3]=3
table[4]=1
Впрочем, для получения двух верхних элементов массива тоже не нужна полная сортировка массива, хватит все того-же одного прохода по массиву, но если для получения верхнего элемента нужна минимум одна переменная, то для получения двух верхних нужно минимум две переменных.
Мне нужно узнать просто ключ самого высого числа! А потом по этому ключу проверить через if then end Вот и все ) изначально просто не правильно подошел к этому..
1
24
5 лет назад
1
Castiel, окей. И что мешает это сделать? Для этого нужна одна переменная (можно две - одну для ключа и одну для значения), один цикл, один if внутри цикла и пара присвоений переменной. Для нумерованного массива цикл по индексу, для ассоциативного - по ключам через pairs.
2
8
5 лет назад
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

так или чет не то ?
0
24
5 лет назад
0
Castiel, да, типа того.
А если немного доработать - можно и второе сверху значение найти в том-же цикле, если оно еще нужно.
0
8
5 лет назад
0
prog:
Castiel, да, типа того.
А если немного доработать - можно и второе сверху значение найти в том-же цикле, если оно еще нужно.
спс бро как тебе плюсик поставить )
Чтобы оставить комментарий, пожалуйста, войдите на сайт.