Я посмотрел здесь еще несколько вопросов, но они явно не решали мой вопрос.
Я пытаюсь отсортировать массив объектов изображения по их отметке времени.При этом заметил, что table.sort не возвращает ожидаемый результат.Затем я создал следующий код, который упрощен для ясности, но показывает то же самое неожиданное поведение.
Мой вопрос таков: что я делаю неправильно, так что все индивидуальные сравнения показывают правильное значение true / false, но конечный результат находится не в порядке возрастания?
EDIT: я обнаружил, что размещениеСравнение непосредственно в вызове table.sort решает проблему, поэтому кажется, что использование внешней функции вызывает такое ошибочное поведение, кто-нибудь может объяснить почему?И есть ли способ облегчить это?
images = {1,2,4,6,5,3,88,34,8}
local function comp_time(first, second) --returns true if 'first' was taken before 'second'
ret = first < second
print(first..' < '..second..' : '..tostring(ret))
return ret
end
print('unsorted:')
for i,image in ipairs(images) do
print(i..' : '..image)
end
table.sort(images, function(image1, image2) comp_time(image1, image2) end)
print('sorted:')
for i,image in ipairs(images) do
print(i..' : '..image)
end
Результат:
unsorted:
1 : 1
2 : 2
3 : 4
4 : 6
5 : 5
6 : 3
7 : 88
8 : 34
9 : 8
8 < 1 : false
5 < 1 : false
8 < 5 : false
2 < 5 : true
5 < 88 : true
4 < 5 : true
5 < 3 : false
6 < 5 : false
5 < 34 : true
6 < 5 : false
5 < 34 : true
8 < 4 : false
2 < 4 : true
8 < 2 : false
6 < 2 : false
2 < 6 : true
2 < 2 : false
2 < 4 : true
6 < 4 : false
34 < 1 : false
88 < 1 : false
34 < 88 : true
3 < 88 : true
88 < 3 : false
88 < 88 : false
88 < 1 : false
3 < 1 : false
sorted:
1 : 1
2 : 3
3 : 88
4 : 34
5 : 5
6 : 4
7 : 6
8 : 2
9 : 8