Я был поклонником Data.Sequence. Но поскольку я узнал о Data.Vector, кажется, что он может делать все, что может сделать Data.Sequence, но лучше, плюс это может сделать больше вещей. Должны ли мы обесценивать Data.Sequence и проповедовать Data.Vector? Есть ли веские причины для использования Data.Sequence для Data.Vector?
Заменяет ли Data.Vector Data.Sequence?
Ответ 1
Ни одна из этих структур данных не может заменить другую; Data.Sequence и Data.Vector на самом деле находятся на диаметрально противоположных концах структур данных, доступных для представления последовательностей.
-
Data.Vector- непрерывный массив элементов. Это означает небольшой объем памяти и O (1) поиск, но страшную мутацию, конкатенацию и копирование (O (n)). (Мутация может быть O (1), если вы бросаете упорство.) -
Data.Sequence, с другой стороны, является чисто функциональным деревом. Это означает более высокий уровень использования памяти и меньшую локальность, но поддерживает быстрый доступ и мутацию O (log n) и удивительную конкатенацию O (log (min (n1, n2))) и копирование.
Выбор структуры данных действительно зависит от выполняемой задачи.
- Обработка больших потоков элементов линейным способом или со случайным поиском лучше всего сделать с помощью
Data.Vector. - Если вам нужно разделить, объединить и изменить свои элементы, используйте
Data.Sequence.
Ответ 2
Обмен префиксом кажется чем-то Seq лучше, чем Vector. snoc on Vector - O (n).