datastructures alternatives and similar packages
Based on the "Algorithms and Data structures" category.
Alternatively, view datastructures alternatives based on common mentions on social networks and blogs.

matrex
A blazing fast matrix library for Elixir/Erlang with C implementation using CBLAS. 
simple_bayes
A Naive Bayes machine learning implementation in Elixir. 
exconstructor
An Elixir library for generating struct constructors that handle external data with ease. 
erlangalgorithms
Implementations of popular data structures and algorithms 
remodel
:necktie: An Elixir presenter package used to transform map structures. "ActiveModel::Serializer for Elixir" 
MapDiff
Calculates the difference between two (nested) maps, and returns a map representing the patch of changes. 
merkle_tree
:evergreen_tree: Merkle Tree implementation in pure Elixir 
parallel_stream
A parallelized stream implementation for Elixir 
sfmt
sfmterlang: SIMDoriented Fast Mersenne Twister (SFMT) for Erlang 
bloomex
:hibiscus: A pure Elixir implementation of Scalable Bloom Filters 
graphmath
An Elixir library for performing 2D and 3D mathematics. 
aja
Extension of the Elixir standard library focused on data stuctures, data manipulation and performance 
the_fuzz
String metrics and phonetic algorithms for Elixir (e.g. Dice/Sorensen, Hamming, Jaccard, Jaro, JaroWinkler, Levenshtein, Metaphone, NGram, NYSIIS, Overlap, Ratcliff/Obershelp, Refined NYSIIS, Refined Soundex, Soundex, Weighted Levenshtein) 
DeepMerge
Deep (recursive) merge for maps, keywords and others in Elixir 
exmatrix
Elixir library implementing a parallel matrix multiplication algorithm and other utilities for working with matrices. Used for benchmarking computationally intensive concurrent code. 
dataframe
Package providing functionality similar to Python's Pandas or R's data.frame() 
ecto_materialized_path
Tree structure & hierarchy for ecto models 
parex
An elixir module for parallel execution of functions/processes 
Conrex
An Elixir implementation of the CONREC algorithm for topographic or isochrone maps. 
murmur
:speech_balloon: An implementation of the noncryptographic hash Murmur3 
bitmap
Bitmap implementation in Elixir using binaries and integers. Fast space efficient data structure for lookups 
combination
A simple combinatorics library providing combination and permutation. 
exor_filter
Erlang nif for xor_filter. 'Faster and Smaller Than Bloom and Cuckoo Filters'.
Build timeseriesbased applications quickly and at scale.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of datastructures or a related project?
README
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]>