Lua table sort claims invalid order function for sorting

我目前在使用LuaTeX(这是一个带有内置lua解释器的TeX引擎)编写一个复杂的程序,其中一个表格需要排序。表格元素本身是具有特定结构的表格,排序函数如下所示:

function sort_list_function (a,b)

  if a.totalfilll < b.totalfilll then
    return true
  elseif a.totalfill < b.totalfill then
    return true
  elseif a.totalfil < b.totalfil then
    return true
  elseif a.totalvalue + a.height + a.totalplus <
         b.totalvalue + b.height + b.totalplus
  then
    return true
  else
    return false
  end
end

所有元素值都是数字,因此我理解比较函数的要求已经满足,但也许我的想法有误(这基本上就是问题,即为什么或在何种情况下,以上代码会导致无效的排序函数错误)。

遗憾的是,错误非常难以隔离,只在某个特定情况下发生,并且之前已经成功地进行了很多排序,因此作为第一步,我想确保自己没有完全忽略以上函数中明显错误的问题。

点赞
用户4008813
用户4008813

好的,感谢 @ColonelThirtyTwo 的提示,答案是比较函数确实有问题,我必须明确处理 > 的情况,并立即返回 false(因为在我的情况下,不同的测试意味着不同的重要性顺序),例如:

  if a.totalfilll < b.totalfilll then
    return true
  elseif a.totalfilll > b.totalfilll then
    return false
  elseif a.totalfill < b.totalfill then
    return true
  elseif a.totalfill > b.totalfill then
    return false
  elseif a.totalfil < b.totalfil then
    return true
  elseif a.totalfil > b.totalfil then
    return false
  else
    return ( a.totalvalue + a.height + a.totalplus <
             b.totalvalue + b.height + b.totalplus    )
  end
2016-05-07 20:06:59
用户2683482
用户2683482

一种我认为容易理解的比较方法。

function sort_list_function (a, b)
  如果 a.totalfilll 不等于 b.totalfilll,则返回 a.totalfilll 小于 b.totalfilll;
  如果 a.totalfill 不等于 b.totalfill,则返回 a.totalfill 小于 b.totalfill;
  如果 a.totalfil 不等于 b.totalfil,则返回 a.totalfil 小于 b.totalfil;
  否则,返回 a.totalvalue + a.height + a.totalplus 小于 b.totalvalue + b.height + b.totalplus。
end
2021-08-07 20:33:05