f# установить и сопоставить равенство

Как работает set1 = set2 для неизменяемых наборов и карт F#? Будут ли они обеспечивать правильное равенство наборов/карт?

В документации говорится:

Неизменяемые наборы на основе двоичных деревьев, где сравнение — это функция структурного сравнения F#, потенциально использующая реализации интерфейса IComparable для значений ключей.

Они основаны на бинарных деревьях, поэтому не может ли быть вставлена ​​точная форма в зависимости от того, в каком порядке были вставлены элементы? Так что наивное использование функции структурного сравнения F# не сработает...

Я не могу найти ничего об этом в документации. Я только что пропустил это?


person johv    schedule 05.12.2013    source источник


Ответы (1)


Да, судя по всему, будет работать нормально.

Глядя на источник , Equals переопределяется и использует GetEnumerator и проверяет, возвращают ли они одни и те же элементы в том же порядке. Они должны быть в порядке, как показано в этом вопрос, так как документ для Set.toSeq говорит: "Упорядоченная последовательность элементов множества".

Это также упоминается в книге Джона Харропа и Дона Сайма «F# для ученых»:

цитата из F# для ученых

person johv    schedule 05.12.2013