I think your summary for when to choose Seq
is pretty good. Here are some additional points:
- Use
Seq
by default when writing functions, because then they work with any .NET collection - Use
Seq
if you need advanced functions likeSeq.windowed
orSeq.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 thehead::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)