I understand that a list actually contains values, and a sequence is an alias for IEnumerable<T>
. In practical F# development, when should I be using a sequence as opposed to a list?
Here's some reasons I can see when a sequence would be better:
IEnumerable<T>
. Are there any others?
A sequence is a logical series of elements all of one type. Sequences are particularly useful when you have a large, ordered collection of data but do not necessarily expect to use all of the elements.
A Sequence is like a Set, except: the terms are in order (with Sets the order does not matter) the same value can appear many times (only once in Sets)
yield! (pronounced yield bang) inserts all the items of another sequence into this sequence being built. Or, in other words, it appends a sequence.
I think your summary for when to choose Seq
is pretty good. Here are some additional points:
Seq
by default when writing functions, because then they work with any .NET collectionSeq
if you need advanced functions like Seq.windowed
or Seq.pairwise
I think choosing Seq
by default is the best option, so when would I choose different type?
Use List
when you need recursive processing using the head::tail
patterns
(to implement some functionality that's not available in standard library)
Use List
when you need a simple immutable data structure that you can build step-by-step
(for example, if you need to process the list on one thread - to show some statistics - and concurrently continue building the list on another thread as you receive more values i.e. from a network service)
Use List
when you work with short lists - list is the best data structure to use if the value often represents an empty list, because it is very efficient in that scenario
Use Array
when you need large collections of value types
(arrays store data in a flat memory block, so they are more memory efficient in this case)
Use Array
when you need random access or more performance (and cache locality)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With