提问人:Steve Bennett 提问时间:7/29/2021 最后编辑:Steve Bennett 更新时间:7/29/2021 访问量:192
简化三向比较 a < b < c ||b < c < a ||c < a < b;
Simplify three way comparison a < b < c || b < c < a || c < a < b;
问:
有没有更短的方法来计算这个布尔表达式?
a < b < c || b < c < a || c < a < b
在 JavaScript 中,这将是:
a < b && b < c || b < c && c < a || c < a && a < b
是否有一些有用的数学或布尔代数技巧可以使这变得不那么麻烦?
a
和 都是数字。在我的特定用例中,它们保证是不同的。b
c
(关于其他背景,它是在回答这个问题的过程中出现的)
答:
4赞
Bergi
7/29/2021
#1
您有 3 个不同的布尔比较,您希望其中 2 个成立。(严格来说,2 个或更多,但在您的情况下,您永远不能拥有所有 3 个)。所以你可以写
a < b && b < c || b < c && c < a || c < a && a < b
如
(a < b) + (b < c) + (c < a) == 2
评论
isAscending(a, b, c) || isAscending(b, c, a) || isAscending(c, a, b)
isAscending = (a, b, c) => a < b && b < c
a = 3, b = 2, c = 1