dictionary - 使用具有不可比较对象的 Map

标签 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不过需要比较。
  • 为什么Map需要比较吗?
  • 我应该使用什么结构? (我假设我可以使用 IDictionary,但我正在努力保持功能。)
  • 最佳答案

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

    关于dictionary - 使用具有不可比较对象的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131019/

    相关文章:

    algorithm - F#写红黑树的难点

    python - 使用 pool.map() 时的全局字典 python

    python - Python 是否优化了引擎盖下的字典查找?

    python - Kotlin:从文件加载包含字符串和元组的字典( HashMap )

    c# - 从 IEnumerable<KeyValuePair<>> 重新创建字典

    f# - 初始化字典的最短方法

    python - 从 3 个列表的 zip 中创建字典

    c# - F# 适用于已经将函数委托(delegate)作为参数的 C# 程序员

    f# - 学习 F#

    f# - F# 中的 leftOuterJoin 和 `.DefaultIfEmpty()` 查询