Использование карты с несопоставимым объектом - PullRequest
0 голосов
/ 02 июля 2018

У меня есть Job тип, равенство определяется как равный идентификатор задания. Никогда не должно быть двух заданий с одинаковым идентификатором. Они не сопоставимы, хотя, одна работа не больше или меньше , чем другая, только равна или нет.

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 голосов
/ 02 июля 2018

Внутренне, F # Map - это , реализованный в виде сбалансированного двоичного дерева (в частности, дерева AVL) , что требует сравнения его типов ключей, чтобы иметь возможность определить, где в дереве принадлежит какой-либо элемент. Для хэш-карты, которая не требует сравнения, тип PersistentHashMap из FSharpx.Collections , вероятно, то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...