lue-bird/elm-linear-direction/2.2.0

NOTE: the latest version is 11.2.0

Array.LinearDirection

Array operations that can be applied in either direction.

scan

at : Int -> LinearDirection -> Array a -> Maybe a

Just the element at an index in a direction.

Array.at 0 LastToFirst
    (Array.fromList [ "lose", "win", "lose" ])
--> Just "lose"




Array.at 0 FirstToLast
    (Array.fromList [ "lose", "win", "lose" ])
--> Just "lose"

Nothing, if the index is out of range.

Array.at -1 FirstToLast (Array.fromList [ 1, 2, 3 ])
--> Nothing


Array.at 100 FirstToLast (Array.fromList [ 1, 2, 3 ])
--> Nothing

modify

replaceAt : Int -> LinearDirection -> element -> Array element -> Array element

Set the element at an index in a direction.

Array.fromList [ "I", "am", "ok" ]
    |> Array.replaceAt 2 FirstToLast "confusion"
--> Array.fromList [ "I", "am", "confusion" ]


Array.fromList [ "I", "am", "ok" ]
    |> Array.replaceAt 1 LastToFirst "feel"
--> Array.fromList [ "I", "feel", "ok" ]

If the index is out of range, the array is unaltered.

Array.fromList [ "I", "am", "ok" ]
    |> Array.replaceAt -1 FirstToLast "is"
--> Array.fromList [ "I", "am", "ok" ]
removeAt : Int -> LinearDirection -> Array a -> Array a

Kick an element out of an Array at a given index in a direction.

Array.fromList [ 'a', 'a', 'b' ]
    |> Array.removeAt 1 FirstToLast
--> Array.fromList [ 'a', 'b', 'c', 'd' ]
Array.fromList [ 'a', 'b', 'c', 'd' ]
    |> Array.removeAt 0 LastToFirst
--> Array.fromList [ 'a', 'b', 'c' ]

If the index is out of bounds, nothing is changed.

Array.removeAt -1 FirstToLast
    (Array.fromList [ 'a', 'a', 'b' ])
--> Array.fromList [ 'a', 'a', 'b' ]


Array.removeAt 100 FirstToLast
    (Array.fromList [ 'a', 'a', 'b' ])
--> Array.fromList [ 'a', 'a', 'b' ]
insertAt : Int -> LinearDirection -> a -> Array a -> Array a

Put an element in an Array at a given index in a direction.

Array.fromList [ 'a', 'c', 'd' ]
    |> Array.insertAt 1 FirstToLast 'b'
--> Array.fromList [ 'a', 'b', 'c', 'd' ]
Array.fromList [ 'a', 'c', 'd' ]
    |> Array.insertAt 2 LastToFirst 'b'
--> Array.fromList [ 'a', 'b', 'c', 'd' ]

If the index is out of bounds, nothing gets inserted.

Array.fromList [ 'a', 'c', 'd' ]
    |> Array.insertAt -1 FirstToLast 'b'
--> Array.fromList [ 'a', 'c', 'd' ]


Array.fromList [ 'a', 'c', 'd' ]
    |> Array.insertAt 10 FirstToLast 'b'
--> Array.fromList [ 'a', 'c', 'd' ]

transform

-> (element -> result -> result)
-> result
-> Array element
-> result

Reduce an Array in a direction.

Array.fold FirstToLast (++) ""
    (Array.fromList [ "l", "i", "v", "e" ])
--> "live"


Array.fold LastToFirst (++) ""
    (Array.fromList [ "l", "i", "v", "e" ])
--> "evil"
order : LinearDirection -> Array a -> Array a

Keep the order if FirstToLast, reverse if LastToFirst.

Array.fromList [ 1, 2, 3 ]
    |> Array.order LastToFirst
--> Array.fromList [ 3, 2, 1 ]


Array.fromList [ 1, 2, 3 ]
    |> Array.order FirstToLast
--> Array.fromList [ 1, 2, 3 ]
resize : LinearDirection -> Int -> a -> Array a -> Array a

Resize an array in a direction, padding with a given value.

Array.resize LastToFirst 4 0
    (Array.fromList [ 1, 2 ])
--> Array.fromList [ 0, 0, 1, 2 ]


Array.resize LastToFirst 2 0
    (Array.fromList [ 1, 2, 3 ])
--> Array.fromList [ 2, 3 ]


Array.resize FirstToLast 4 0
    (Array.fromList [ 1, 2 ])
--> Array.fromList [ 1, 2, 0, 0 ]


Array.resize FirstToLast 2 0
    (Array.fromList [ 1, 2, 3 ])
--> Array.fromList [ 1, 2 ]

The result is an emmpty array if the index is negative.

Array.resize LastToFirst -1 0
    (Array.fromList [ 1, 2 ])
--> Array.empty

part

take : Int -> LinearDirection -> Array a -> Array a

A certain number of elements from one side.

Array.fromList [ 1, 2, 3, 4, 5, 6 ]
    |> Array.take 4 FirstToLast
    |> Array.take 2 LastToFirst
--> Array.fromList [ 3, 4 ]


Array.fromList [ 1, 2, 3 ]
    |> Array.take 100 FirstToLast
--> Array.fromList [ 1, 2, 3 ]


Array.fromList [ 1, 2, 3 ]
    |> Array.take -100 FirstToLast
--> Array.empty
drop : Int -> LinearDirection -> Array a -> Array a

After a certain number of elements from one side.

Array.fromList [ 1, 2, 3, 4, 5, 6 ]
    |> Array.drop 2 LastToFirst
--> Array.fromList [ 1, 2, 3, 4 ]


Array.fromList [ 1, 2, 3 ]
    |> Array.drop 100 FirstToLast
--> Array.empty

Nothing is dropped if the index is negative.

Array.drop -1 FirstToLast
    (Array.fromList [ 1, 2, 3 ])
--> Array.fromList [ 1, 2, 3 ]
Int
-> Array a
-> { groups : Array (Array a)
, less : Array a
}

Split the Array into equal-sized chunks. The elements left over on one side are in less.

Array.fromList [ 1, 2, 3, 4, 5, 6, 7 ]
    |> Array.group 3 FirstToLast
--> { groups =
-->     [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]
-->         |> List.map Array.fromList
-->         |> Array.fromList
--> , less = Array.fromList [ 7 ]
--> }


Array.fromList [ 1, 2, 3, 4, 5, 6, 7 ]
    |> Array.group 3 LastToFirst
--> { less = Array.fromList [ 1 ]
--> , groups =
-->     [ [ 2, 3, 4 ], [ 5, 6, 7 ] ]
-->         |> List.map Array.fromList
-->         |> Array.fromList
--> }

unite

concat : LinearDirection -> List (Array a) -> Array a

Append multiple Arrays in a direction.

Array.concat FirstToLast
    [ Array.fromList [ 2, 4, 6 ]
    , Array.fromList [ 8 ]
    , Array.fromList [ 10, 12, 14 ]
    ]
--> Array.fromList
-->     [ 2, 4, 6, 8, 10, 12, 14 ]


Array.concat LastToFirst
    [ Array.fromList [ 2, 4, 6 ]
    , Array.fromList [ 8 ]
    , Array.fromList [ 10, 12, 14 ]
    ]
--> Array.fromList
-->     [ 14, 12, 10, 8, 6, 4, 2 ]