Minori.Slices
1.0.0
See the version list below for details.
dotnet add package Minori.Slices --version 1.0.0
NuGet\Install-Package Minori.Slices -Version 1.0.0
<PackageReference Include="Minori.Slices" Version="1.0.0" />
paket add Minori.Slices --version 1.0.0
#r "nuget: Minori.Slices, 1.0.0"
// Install Minori.Slices as a Cake Addin #addin nuget:?package=Minori.Slices&version=1.0.0 // Install Minori.Slices as a Cake Tool #tool nuget:?package=Minori.Slices&version=1.0.0
Minori.Slices
Immutable memory block for F#
Introduction
Slice
is an immutable memory block like the ReadOnlyMemory<'T>
but more useful as a collection.
Except for immutability, Slice
is a port of the Go language slice to dotnet.
Features
- Fast random access
- Fast slicing using
s[x..y]
syntax slice
computation syntax for creating slicesSlice.map
,Slice.filter
and more combinators- Serialization using
JsonSerializer
(>= .NET6) AsSpan()
andAsMemory()
Operations
Create
let s = slice { 1; 2; 3 }
let s = Slice.ofArray [| 1; 2; 3 |]
let s = Slice.empty
let s = Slice.create<int> 10 // create an empty slice with capacity 10
Add items
let s1 = Slice.create 5 // { }
let s2 = s1 |> Slice.add 'a' // { 'a' }
let s3 = s2 |> Slice.addRange [| 'b'; 'c' |] // { 'a'; 'b'; 'c' }
let s4 = s3 |> Slice.addRange [| 'd'; 'e'; 'f' |] // { 'a'; 'b'; 'c'; 'd'; 'e'; 'f' }
let s5 = s1 |> Slice.add '%' // { 'a'; '%' }
Here, s1
, s2
, and s3
reference to the same memory address.
s4
references the newly allocated memory becase exceeded its capacity.
s5
references the newly allocated memory becase 'b'
has already been written to the memory.
Slice operation
Slice operation of Slice
is end-exclusive.
So the slice returned by s[x..y]
does not contain the y-th element.
let s1 = slice { 0; 1; 2; 3; 4 }
let s2 = s1[..3] // { 0; 1; 2 }
let s3 = s1[3..] // { 3; 4 }
let s4 = s1[1..3] // { 1; 2 }
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- FSharp.Core (>= 7.0.200)
-
net6.0
- FSharp.Core (>= 7.0.200)
-
net7.0
- FSharp.Core (>= 7.0.200)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.