将地图与不可比对象一起使用

时间:2018-07-02 07:25:49

标签: dictionary f#

我的类型为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需要进行比较。

  1. 为什么Map需要比较?
  2. 我应该使用什么结构? (我假设我可以使用IDictionary,但我正在尝试保持功能正常。)

1 个答案:

答案 0 :(得分:4)

在内部,F#的Mapimplemented as a balanced binary tree (specifically, an AVL tree),它需要比较其键类型才能确定任何项在树中的位置。对于不需要比较的哈希映射,PersistentHashMap type from FSharpx.Collections可能就是您想要的。