Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
5 / 5 / 1
Регистрация: 25.10.2013
Сообщений: 230
1

Table.sort дает странный результат при <=

19.09.2017, 04:35. Просмотров 803. Ответов 3
Метки нет (Все метки)


Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
crdsClear={{y=56,x=50,symbolName=3,},
{y=56,x=29,symbolName=2,},
{y=56,x=99,symbolName=2,},
{y=56,x=9,symbolName=5,},
{y=56,x=69,symbolName=5,},
{y=56,x=19,symbolName=4,},
{y=56,x=59,symbolName=4,},
{y=56,x=89,symbolName=4,},
{y=56,x=40,symbolName=7,},
{y=56,x=80,symbolName=6,},}
 
 
 
tmp2={}
ywf = 1
table.sort(crdsClear,
    function(a,b)
        tmp2[ywf]=""
        for i=1, #crdsClear, 1 do tmp2[ywf] = tmp2[ywf].."\t"..crdsClear[i].x end
        ywf = ywf + 1
        if  a.x <= b.x then print(a.x.." <= "..b.x.." true") else print(a.x.." <= "..b.x.." false") end
        return a.x <= b.x --  a.y <= b.y and
    end
)
 
-- Собираем строку
order=""
print(#crdsClear)
result = {[1]=""}
for i=1, #crdsClear, 1 do
    order = order..crdsClear[i].x.." "
    result[1] = result[1].. crdsClear[i].symbolName
end
print(order)
print(result[1])
если поменять:
return a.x <= b.x
на:
return a.x < b.x
то порядок приходит в норму. В чем проблема?

Добавлено через 15 часов 59 минут
Разложение на:
Lua
1
2
3
4
5
if  val1 > val2 then
    return false
else
    return true
end
Приводит к тем же проблемам. Хотелось бы понять причины данного поведения.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.09.2017, 04:35
Ответы с готовыми решениями:

Декомпиляция дает странный результат
Всем добра! Подскажите в чем проблема. на скрине видно что при декмпиляции exe выдается...

Вложенный FETCH FROM дает странный результат
Есть вот такая процедура. На выходе должен получиться текст запроса. CREATE PROCEDURE . ( ...

Странный результат при округлении
ПочемуedtResult.setText(String.valueOf(Math.round(result * 100.0) / 100.0));...

Странный результат при минимизации функции
Коллеги, день добрый. Требуется минимизировать функцию \varphi (T) по Т. Использую алгоритм...

3
Псевдослучайный
1936 / 1137 / 96
Регистрация: 13.09.2011
Сообщений: 3,205
19.09.2017, 07:58 2
Пришло время почитать документацию, документация сама не почитается.
Sorts list elements in a given order, in-place, from list[1] to list[#list]. If comp is given, then it must be a function that receives two list elements and returns true when the first element must come before the second in the final order (so that, after the sort, i < j implies not comp(list[j],list[i])). If comp is not given, then the standard Lua operator < is used instead.

Note that the comp function must define a strict partial order over the elements in the list; that is, it must be asymmetric and transitive. Otherwise, no valid sort may be possible.

The sort algorithm is not stable: elements considered equal by the given order may have their relative positions changed by the sort.
0
5 / 5 / 1
Регистрация: 25.10.2013
Сообщений: 230
19.09.2017, 18:17  [ТС] 3
Я извиняюсь, а что есть ассиметричность и транзитивность?

Добавлено через 1 час 15 минут
Точнее транзитивность вроде понятно, но не понятно, где она тут нарушается, ассиметрия в данном контексте не понимаю, что означает.
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,177
26.09.2017, 13:42 4
Просто алгоритм сортировки так построен, что есму нужна именно операция "меньше"... Требование у него такое.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2017, 13:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

При выполнении функции результат должен показать, сколько строк в таблице TABLE при условии P1= MY_DATE
Здравствуйте помогите с запросом Знатоки плизз! Создать функцию с входным параметром P1(DATE),...

Программа дает неверный результат при вычислениях
Проблема в том, что программа считает неправильно, я считал с калькулятора и по формулам excel, и...

При введении больше 20 чисел программа выдает странный результат
#include &lt;iostream&gt; #include &lt;locale&gt; using namespace std; double t1, t2; int main() {...

Один запрос даёт разный результат при разных ролях
Добрый день, вообщем такая штука, один и тот же запрос(да отрабатывает именно он, параметры именно...

Выдает очень странный конечный результат при вычеслении простой математической формулы
#include &lt;stdio.h&gt; #include &lt;Windows.h&gt; main() { SetConsoleCP(1251);...

Почему изменение параметра шаблона при вызове функции даёт неверный результат?
Есть такой код: #include &lt;opencv2/highgui/highgui.hpp&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.