В функциональном программировании односвязные списки чрезвычайно популярны, потому что легко повторно использовать вложенные списки без выделения памяти или копирования значений. Это означает, что вы можете добавлять или удалять элементы с одного конца без какого-либо распределения. Список F# выглядит следующим образом.
Из того, что я прочитал, похоже, что System.Collections.Immutable.ImmutableList<T>
похож на неизменяемую версию System.Collections.Generic.List<T>
, которая является абстракцией над массивами. Это более оптимизировано для произвольного доступа, чем связанный список, но требует копирования всего списка при добавлении или удалении элементов.
System.Collections.Generic.LinkedList<T>
— это изменяемый двусвязный список, что означает, что для добавления или удаления элементов требуется либо изменение, либо копирование.
Я не смог найти System.Collections.Immutable.ImmutableLinkedList<T>
.
Неужели в пакете System.Collections.Immutable
нет неизменяемого односвязного списка? Является ли использование Microsoft.FSharp.Core.List<T>
лучшим вариантом здесь?