【发布时间】:2013-12-05 18:25:50
【问题描述】:
set1 = set2 用于 F# 不可变集合和映射如何工作?他们会做正确的集合/映射平等吗?
文档说:
基于二叉树的不可变集合,其中比较是 F# 结构比较函数,可能使用 键值上的 IComparable 接口。
它们是基于二叉树的,所以可能不是根据插入的顺序元素的确切形式吗?所以天真地使用F#结构比较函数是行不通的……
我在文档中找不到任何关于它的信息。我刚刚错过了吗?
【问题讨论】:
set1 = set2 用于 F# 不可变集合和映射如何工作?他们会做正确的集合/映射平等吗?
文档说:
基于二叉树的不可变集合,其中比较是 F# 结构比较函数,可能使用 键值上的 IComparable 接口。
它们是基于二叉树的,所以可能不是根据插入的顺序元素的确切形式吗?所以天真地使用F#结构比较函数是行不通的……
我在文档中找不到任何关于它的信息。我刚刚错过了吗?
【问题讨论】:
是的,显然它会正常工作。
查看the source,Equals 被覆盖并使用GetEnumerator 并检查它们是否以相同的顺序返回相同的元素。这些应该是有序的,如this question 所示,因为Set.toSeq 的文档说:“集合元素的有序序列。”
这在 Jon Harrop 和 Don Syme 的“F# for Scientists”一书中也提到过:
【讨论】: