Lua中如何对布尔值进行排序/比较

Lua中如何比较/排序布尔值? 假设 "标准" 排序是 true > false.

local first = true
local second = false

first > second

stdin:1: attempt to compare two boolean values
stack traceback:
      stdin:1: in main chunk
      [C]: in ?
点赞
用户1091436
用户1091436

由于两个操作数都是布尔值,因此可以使用标准的布尔技巧:

第一个或非第二个 -- 第一个 >= 第二个
第一个且非第二个 -- 第一个 > 第二个

示例:

my_table = {
  { name = "Max", strong = true },
  { name = "Ray", strong = false },
  { name = "Sam", strong = true }
}
table.sort(my_table, function(a, b)
  return a.strong or not b.strong
end)

>= a or not b 的版本在排序时更具性能,因为它会针对更多的布尔对返回true,从而在排序期间产生较少的“元素交换”操作。

2018-07-30 14:39:08
用户107090
用户107090

Booleans cannot be compared for order.

但是如果你坚持,可以试试这个:

debug.setmetatable(true,{
    __lt = function (x,y) return (not x) and y end
})

print("false < false", false < false)
print("false < true",  false < true)
print("true  < false", true  < false)
print("true  < true",  true  < true)
2018-07-30 16:29:28