Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lua

Войти
Регистрация
Восстановить пароль
 
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
#1

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

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

Код
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 минут
Разложение на:
Код
if  val1 > val2 then
    return false
else
    return true
end
Приводит к тем же проблемам. Хотелось бы понять причины данного поведения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2017, 04:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Table.sort дает странный результат при <= (Lua):

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

Вложенный FETCH FROM дает странный результат - SQL Server
Есть вот такая процедура. На выходе должен получиться текст запроса. CREATE PROCEDURE . ( @classifier varchar(max) = ''...

Странный результат при округлении - Программирование Android
ПочемуedtResult.setText(String.valueOf(Math.round(result * 100.0) / 100.0)); edtResult.setText(String.format(&quot;%.2f&quot;, result)); ...

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

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

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

3
NoMasters
Псевдослучайный
1908 / 1119 / 77
Регистрация: 13.09.2011
Сообщений: 3,175
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
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
19.09.2017, 18:17  [ТС] #3
Я извиняюсь, а что есть ассиметричность и транзитивность?

Добавлено через 1 час 15 минут
Точнее транзитивность вроде понятно, но не понятно, где она тут нарушается, ассиметрия в данном контексте не понимаю, что означает.
0
Mirmik
techpriest
216 / 187 / 49
Регистрация: 27.02.2014
Сообщений: 973
26.09.2017, 13:42 #4
Просто алгоритм сортировки так построен, что есму нужна именно операция "меньше"... Требование у него такое.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2017, 13:42
Привет! Вот еще темы с ответами:

Выдает очень странный конечный результат при вычеслении простой математической формулы - C (СИ)
#include &lt;stdio.h&gt; #include &lt;Windows.h&gt; main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); double x, y, z, formul; ...

Bucket Sort, не выдаётся правильный результат - C (Си)
Нужно отсортировать массив символов используя Bucket Sort. Мой код не делает это правильно,например при массиве символов...

Странный результат на выходе у НС - Искусственный интеллект
Доброго времени суток, госопода форумяне! Огромная просьба, если где-то пролетала тема, похожая на описанную ниже мной, не ругайтесь, а...

Выводит странный результат - Delphi
Помогите пожалуйста с кодом программы! Вроде работает, но выводит странный результат. Не могу найти ошибку. unit Unit1; interface ...


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

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

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