三路比较

计算机科学中,三路比较(three-way comparison)取具有全序的属于同一类型的2个值A和B,在一个操作中确定A < B, A = B, 或 A > B。这是数学上的三分律概念。

编程语言支持
C语言的函数strcmp和memcmp在字符串之间、内存空间之间做三路比较。返回负值表示第一操作数在字典序上小于第二操作数;返回零表示2个操作数相等;返回正值表示第一操作数大于第二操作数。标准库的快排序函数qsort把三路比较扩展到任何类型,要求提供一个执行比较的函数指针。

C++20引入了“航天飞船运算符”(spaceship operator)做三路比较。

Perl(限数值比较,如果是字符串字典序比较要用cmp运算符), PHP (从版本7), Ruby, Apache Groovy,都使用航天飞船运算符返回−1、0、1分别表示大于、等于、小于。 Python 2.x cmp(被Python 3.x删除)、OCaml compare, 和Kotlin的compareTo函数做相应的事。Haskell标准库的三路比较函数compare可用于所有属于Ord类型类的类型,返回类型为Ordering, 其值是LT (小于), EQ (相等), GT (大于):

data Ordering = LT | EQ | GT

许多面向对象编程语言的三路比较方法,在当前对象和其他给定对象之间三路比较。例如,Java语言中任何实现了Comparable接口的类都有[http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html#compareTo%28T%29 compareTo] 方法,返回非负整数、零、正整数,或抛出一个NullPointerException异常(如果一个或两个对象是null)。类似地,.NET Framework中,任何实现了IComparable接口的类都有[http://msdn.microsoft.com/en-us/library/system.icomparable.compareto.aspx CompareTo] 方法。

从Java 1.5开始,也可以用Math.signum静态方法。

航天飞船运算符
Perl, PHP, Ruby, Apache Groovy,C++20等语言都使用航天飞船运算符

这个名字起源于在上的游戏的星战飞船。也有编程者建议按星球大战的钛战机命名。

PHP例子:

echo 1 1; // 0
echo 1 2; // -1
echo 2 1; // 1

参见

  • strcmp

参考文献

评论 (0)

  • 还没有评论,来抢沙发吧。