7 votes

Utilisation d'une carte avec un objet non comparable

J'ai Job l'égalité est définie comme l'égalité de l'ID du travail. Il ne devrait jamais y avoir deux emplois avec le même ID. Ils ne sont pas comparables pour autant, un job n'est pas plus o moins qu'un autre, seulement égal ou non.

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>
}

En Map a besoin d'une comparaison cependant.

  1. Pourquoi un Map besoin d'une comparaison ?
  2. Quelle structure dois-je utiliser ? (Je suppose que je pourrais utiliser un IDictionary mais j'essaie de rester fonctionnel).

4voto

rmunn Points 2576

En interne, la fonction Map es mis en œuvre sous la forme d'un arbre binaire équilibré (plus précisément, un arbre AVL) qui nécessite une comparaison de ses types de clés pour pouvoir décider de l'emplacement d'un élément dans l'arbre. Pour une carte de hachage qui ne nécessite pas de comparaison, la fonction PersistentHashMap type de FSharpx.Collections est probablement ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X