Awesome
Datastructures for Elixir
This is a collection of protocols, implementations and wrappers to work with datastructures.
The stdlib of Elixir right now is very poor and every now so you end up using the Erlang libraries, which have different APIs from the rest of idiomatic Elixir, and on top of that they lose all the protocol goodies.
Protocols
Sequence
first/1
- returns the first element in the sequence or nilnext/1
- returns a new sequence with the first element removed or nil
Counted
count
- returns the length of the structure
Emptyable
empty?/1
- checks if the structure is emptyclear/1
- returns an empty structure
Reducible
reduce/3
- reduces the structures
Sequenceable
to_sequence/1
- converts the structure to a sequence
Listable
to_list/1
- converts the structure to a list
Peekable
peek/1
- peeks and returns nil if the structure emptypeek/2
- peeks and returns the default value if the structure emptypeek!/1
- peeks and raises if the structure is empty
Reversible
reverse/1
- reverses the structure
Contains
contains?/2
- checks if the structure contains the passed value
Queue
enq/2
- enqueues a value in the structuredeq/1
- dequeues a value from the structure, returning nil if it's emptydeq/2
- dequeues a value from the structure, returning the default if it's emptydeq!/1
- dequeues a value from the structure, raising if it's empty
Stack
push/2
- pushes a value in the structurepop/1
- pops a value from the structure, returning nil if it's emptypop/2
- pops a value from the structure, returning the default if it's emptypop!/1
- pops a value from the structure, raising if it's empty
Set
add/2
- adds a value to the structuredelete/2
- deletes a value from the structureunion/2
- returns the union of the two structuresintersection/2
- returns the intersection of the two structuressubset?/2
- checks if the two structures are subsetsdisjoint?/2
- checks if the two structures are disjoint
Dictionary
get/2
- gets a value from the structure by its key, returning nil if there isn't oneget/3
- gets a value from the structure by its key, returning the default if there isn't oneget!/2
- gets a value from the structure by its key, raising if there isn't oneput/3
- puts a value in the structure with its keydelete/2
- delete a value from the structure by its keykeys/1
- returns a list of the keys in the structurevalues/1
- returns a list of the values in the structure
Helpers
Dict
get/2
- gets a value from the structure by its key, returning nil if there isn't oneget/3
- gets a value from the structure by its key, returning the default if there isn't oneget!/2
- gets a value from the structure by its key, raising if there isn't oneput/3
- puts a value in the structure with its keydelete/2
- delete a value from the structure by its keykeys/1
- returns a list of the keys in the structurevalues/1
- returns a list of the values in the structureput_new/3
- puts a value in the structure unless there's already one with that keyupdate/3
- updates the structure with an updater function, raises if there's no value with that keyupdate/4
- updates the structure with an updater function, the initial value is passed if there's no value with that key
Seq
with_index/1
- returns a sequence wrapping the sequence and returning indexesall?/1
- checks all elements in the sequence are truthyall?/2
- checks all elements are truthy with the given predicateany?/1
- checks if any element in the sequence is truthyany?/2
- checks if any element in the sequence is truthy with the given predicateat/2
- gets the element at the given index, returns nil if the sequence is shorterat/3
- gets the element at the given index, returns the default value if the sequence is shorterdrop/2
- drops the given number of elements from the sequencedrop_while/2
- drops elements from the sequence as long as the predicate returns a truthy valuetake/2
- take the given number of elements from the sequencetake_while/2
- take elements from the sequence as long as the predicate returns a truthy valueeach/2
- iterate over the sequenceselect/2
- filters the elements from the sequence returning the ones the predicate returns a truthy value forreject/2
- filters the elements from the sequence returning the ones the predicate returns a falsy value formap/2
- returns the sequence mapped with the given functionreduce/3
- reduce the sequencesort/1
- sort the sequencesort/2
- sort the sequence with the given predicatecount/1
- count the elements in the sequencecount/2
- count the elements in the sequence that match the predicatezip/2
- zip two sequences togethermax/1
- return the max value in the sequencemax/2
- return the max value in the sequence using a mappermin/1
- return the min value in the sequencemin/2
- return the min value in the sequence using a mapperuniq/1
- returns the elements without repetitionsuniq/2
- returns the elements without repetitions using a mapperreverse/1
- reverse the sequenceto_list/1
- convert the sequence to a list
You're awful, those names are long
I know right? Just use alias
.
alias Data.Set, as: S
alias Data.Set.BalancedTree, as: SBT
SBT.new |> S.add(23) |> S.add(42) # => #Set<[23,42]>