我有 Job
类型,相等定义为作业的 ID 相等。永远不应该有两个具有相同 ID 的作业。但它们没有可比性,一项工作并不比另一项工作多或少,只有相等与否。
type JobId = JobId of string
[<CustomEquality; NoComparison>]
type Job = {
Id: JobId
} with
interface System.IEquatable<Job> with
member x.Equals y = x.Id = y.Id
type Resource = {
Id: string
Capacity: float
Usage: Map<Job,float>
}
Map
不过需要比较。Map
需要比较吗? IDictionary
,但我正在努力保持功能。)最佳答案
在内部,F# 的 Map
是 implemented as a balanced binary tree (specifically, an AVL tree) ,这需要比较其键类型才能确定任何项目在树中的位置。对于不需要比较的哈希映射, PersistentHashMap
type from FSharpx.Collections可能是你想要的。
关于dictionary - 使用具有不可比较对象的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131019/