简化三向比较 a < b < c ||b < c < a ||c < a < b;

Simplify three way comparison a < b < c || b < c < a || c < a < b;

提问人:Steve Bennett 提问时间:7/29/2021 最后编辑:Steve Bennett 更新时间:7/29/2021 访问量:192

问:

有没有更短的方法来计算这个布尔表达式?

a < b < c || b < c < a || c < a < b

在 JavaScript 中,这将是:

a < b && b < c || b < c && c < a || c < a && a < b

是否有一些有用的数学或布尔代数技巧可以使这变得不那么麻烦?

a和 都是数字。在我的特定用例中,它们保证是不同的。bc

(关于其他背景,它是在回答这个问题的过程中出现的)

JavaScript 比较 运算符 boolean-expression boolean-algebra

评论

2赞 VLAZ 7/29/2021
我只是在哪儿做.isAscending(a, b, c) || isAscending(b, c, a) || isAscending(c, a, b)isAscending = (a, b, c) => a < b && b < c
1赞 Martin 7/29/2021
我只喝了两杯咖啡,所以如果这很愚蠢,请原谅我,但在什么情况下这不能是真的?也许最好用它们来测试?
1赞 Bravo 7/29/2021
@Martin 如果 a = b = c :p怎么办
2赞 VLAZ 7/29/2021
@Martin是错误的。a = 3, b = 2, c = 1
1赞 Steve Bennett 7/29/2021
添加了更多详细信息。@Martin:没有。这两种情况的可能性相同。

答:

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