ResizeArrayT is an F# extension and module library for ResizeArray<'T>
( = Collection.Generic.List<'T>
).
It provides all the functions from the Array
module in FSharp.Core
for ResizeArray
.
And more.
It also works in Javascript and Typescript with Fable.
This library was designed for use with F# scripting.
Functions and methods never return null.
When a function fails on invalid input it will throw a descriptive exception.
Functions starting with try...
will return an F# option.
I was always annoyed that an IndexOutOfRangeException
does not include the actual bad index nor the actual size of the array.
This library fixes that in the resizeArray.Get
, resizeArray.Set
, resizeArray.Slice
and similar instance methods for item access.
I made a similar a similar library for array<'T>
: https://github.com/goswinr/ArrayT/ .
Yes, F#'s array and list modules can do these kind of operations on collections too.
But ResizeArray, being mutable, still offers the best performance for collections that can expand & shrink and need random access via an index.
In fact FSharp.Core uses a very similar module internally.
-
A
ResizeArray
module that has all functions from [Array
module fromFSharp.Core
] reimplemented (https://fsharp.github.io/fsharp-core-docs/reference/fsharp-collections-arraymodule.html).
Including the sub module for Parallel computing. -
A Computational Expressions
resizeArray
that can be used like existing ones forseq
. -
Support for F# slicing operator and indexing from the end. e.g:
items.[ 1 .. ^1]
. -
Extension members on
ResizeArray
like.Get
.Set
.First
.Last
.SecondLast
and more.
With nicer IndexOutOfRangeExceptions that include the bad index and the actual size. -
All Tests from the from
FSharp.Core
'sArray
module ported and adapted to run in both javascript and dotnet.
The main namespace is ResizeArrayT
.
It was renamed from ResizeArray
to ResizeArrayT
in release 0.23. When used in scripting this helps avoid name collisions with the
module inside of the same name. [Reference Issue].(dotnet/fsharp#17124)
Older versions of the library will still work with the old namespace ResizeArray
.
And can be found on nuget.org with the name ResizeArray.
Just open the namespace
open ResizeArrayT
this namespace contains:
- a module also called
ResizeArray
- a Computational Expressions called
resizeArray
- this will also auto open the extension members on
ResizeArray<'T>
then you can do:
let evenNumbers =
resizeArray { // a Computational Expression like seq
for i = 0 to 99 do
if i % 2 = 0 then
i
}
let oddNumbers = evenNumbers |> ResizeArray.map (fun x -> x + 1) // ResizeArray module
let hundred = oddNumbers.Last // Extension member to access the last item in the list
goswinr.github.io/ResizeArrayT
All Tests run in both javascript and dotnet. Successful Fable compilation to typescript is verified too. Go to the tests folder:
cd Tests
For testing with .NET using Expecto:
dotnet run
for JS testing with Fable.Mocha and TS verification:
npm test
see CHANGELOG.md