Набор против заказанного набора

Не могли бы вы привести пример, когда использовать вместо ? Я провел пару тестов, и даже в документации immutable-js говорится

Порядок итерации набора не определен, но стабилен

кажется порядок элементов внутри Setвсегда совпадает с тем, в который были добавлены элементы. Это то, что кажется единственным преимуществом OrderedSetструктура:

Тип Set с дополнительной гарантией того, что порядок итерации значений будет соответствовать порядку, в котором они были добавлены.

1 ответ

Он случайно добавляет элементы в конце, но не гарантируется, что так будет всегда. Это может измениться в следующем выпуске, и это не всегда должно быть предсказуемо. Все, что он обещает, — это стабильность при нескольких итерациях с одними и теми же данными. Честно говоря, я не вижу никакого полезного варианта использования OrderedSet. В зависимости от потребностей лучше подходят List , Map или OrderedMap или даже Set .

Если вам удастся обновить набор, он может изменить порядок. Опять же, обычно это плохой выбор для структуры данных, и вам, вероятно, следует перестроить структуру данных, например, вместо этого использовать OrderedMap или List.

В следующем примере показано, что порядок может быть немного неожиданным:

В довершение ко всему, в ImmutableJs RC12 есть ошибка , из-за которой OrderedSet ведет себя точно так же (перемещая обновленный элемент в конец списка). Это уже исправлено в (пока) невыпущенной грядущей версии 4.0.

Хорошо, это была интересная экскурсия, вы заставили нас (свободную группу сопровождающих) еще раз изучить, как работает эта редко используемая структура.

Другие вопросы по тегам