我正在阅读 F# 文档并发现了该compare函数。文档中的示例并没有真正说明该函数的作用。我也尝试了一些输入,但找不到清晰的模式。
比较列表时,值为 -1、0 或 1。
> compare [1;2;4] [8;1;4;9]
-1
> compare [1;2;4] [1;2;3]
1
> compare [1;2;4] [1;2;4]
0
Run Code Online (Sandbox Code Playgroud)
但是当比较字符串时,数字可能会大于 1。
> compare "abf" "abc"
3
Run Code Online (Sandbox Code Playgroud)
比较什么compare?
F # 语言规范提供了语言元素的正式描述。功能请compare参见第 17 页。173“8.15.6 哈希、= 和比较的行为”,其中以伪代码描述行为以实现以下目标:
- 字符串的序数比较
- 数组的结构比较
- 本机整数的自然排序(不支持 System.IComparable)
结构比较是函数式编程中的一个重要概念,它确实适用于元组、列表、选项、数组和用户定义的记录、联合和结构类型,其组成字段类型允许结构相等、散列和比较。
对于字符串,比较依赖于System.String.CompareOrdinal,其返回值在方法下描述System.String.Compare:
小于零:按排序顺序,strA 位于 strB 之前。
零:在排序顺序中,strA 与 strB 出现在相同的位置。
大于零:strA 按排序顺序位于 strB 之后。