Logo

0x3d.Site

is designed for aggregating information.
Welcome
check repository here

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 nil
  • next/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 empty
  • clear/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 empty
  • peek/2 - peeks and returns the default value if the structure empty
  • peek!/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 structure
  • deq/1 - dequeues a value from the structure, returning nil if it's empty
  • deq/2 - dequeues a value from the structure, returning the default if it's empty
  • deq!/1 - dequeues a value from the structure, raising if it's empty

Stack

  • push/2 - pushes a value in the structure
  • pop/1 - pops a value from the structure, returning nil if it's empty
  • pop/2 - pops a value from the structure, returning the default if it's empty
  • pop!/1 - pops a value from the structure, raising if it's empty

Set

  • add/2 - adds a value to the structure
  • delete/2 - deletes a value from the structure
  • union/2 - returns the union of the two structures
  • intersection/2 - returns the intersection of the two structures
  • subset?/2 - checks if the two structures are subsets
  • disjoint?/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 one
  • get/3 - gets a value from the structure by its key, returning the default if there isn't one
  • get!/2 - gets a value from the structure by its key, raising if there isn't one
  • put/3 - puts a value in the structure with its key
  • delete/2 - delete a value from the structure by its key
  • keys/1 - returns a list of the keys in the structure
  • values/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 one
  • get/3 - gets a value from the structure by its key, returning the default if there isn't one
  • get!/2 - gets a value from the structure by its key, raising if there isn't one
  • put/3 - puts a value in the structure with its key
  • delete/2 - delete a value from the structure by its key
  • keys/1 - returns a list of the keys in the structure
  • values/1 - returns a list of the values in the structure
  • put_new/3 - puts a value in the structure unless there's already one with that key
  • update/3 - updates the structure with an updater function, raises if there's no value with that key
  • update/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 indexes
  • all?/1 - checks all elements in the sequence are truthy
  • all?/2 - checks all elements are truthy with the given predicate
  • any?/1 - checks if any element in the sequence is truthy
  • any?/2 - checks if any element in the sequence is truthy with the given predicate
  • at/2 - gets the element at the given index, returns nil if the sequence is shorter
  • at/3 - gets the element at the given index, returns the default value if the sequence is shorter
  • drop/2 - drops the given number of elements from the sequence
  • drop_while/2 - drops elements from the sequence as long as the predicate returns a truthy value
  • take/2 - take the given number of elements from the sequence
  • take_while/2 - take elements from the sequence as long as the predicate returns a truthy value
  • each/2 - iterate over the sequence
  • select/2 - filters the elements from the sequence returning the ones the predicate returns a truthy value for
  • reject/2 - filters the elements from the sequence returning the ones the predicate returns a falsy value for
  • map/2 - returns the sequence mapped with the given function
  • reduce/3 - reduce the sequence
  • sort/1 - sort the sequence
  • sort/2 - sort the sequence with the given predicate
  • count/1 - count the elements in the sequence
  • count/2 - count the elements in the sequence that match the predicate
  • zip/2 - zip two sequences together
  • max/1 - return the max value in the sequence
  • max/2 - return the max value in the sequence using a mapper
  • min/1 - return the min value in the sequence
  • min/2 - return the min value in the sequence using a mapper
  • uniq/1 - returns the elements without repetitions
  • uniq/2 - returns the elements without repetitions using a mapper
  • reverse/1 - reverse the sequence
  • to_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]>
Elixir
Elixir
Elixir is a dynamic, functional programming language designed for building scalable and maintainable applications. Built on the Erlang VM, it's known for its high concurrency and fault tolerance, making it ideal for real-time systems and web services.
GitHub - chrismccord/atlas: Object Relational Mapper for Elixir
GitHub - chrismccord/atlas: Object Relational Mapper for Elixir
GitHub - mbuhot/ecto_job: Transactional job queue with Ecto, PostgreSQL and GenStage
GitHub - mbuhot/ecto_job: Transactional job queue with Ecto, PostgreSQL and GenStage
GitHub - zamith/tomlex: A TOML parser for elixir
GitHub - zamith/tomlex: A TOML parser for elixir
GitHub - pablomartinezalvarez/glayu: A static site generator for mid-sized sites.
GitHub - pablomartinezalvarez/glayu: A static site generator for mid-sized sites.
GitHub - jui/mustachex: Mustache for Elixir
GitHub - jui/mustachex: Mustache for Elixir
GitHub - joaothallis/elixir-auto-test: Run test when file is saved
GitHub - joaothallis/elixir-auto-test: Run test when file is saved
GitHub - campezzi/ignorant: Simplify comparison of Elixir data structures by ensuring fields are present but ignoring their values.
GitHub - campezzi/ignorant: Simplify comparison of Elixir data structures by ensuring fields are present but ignoring their values.
GitHub - Driftrock/mockingbird: A set of helpers to create http-aware modules that are easy to test.
GitHub - Driftrock/mockingbird: A set of helpers to create http-aware modules that are easy to test.
GitHub - gutschilla/elixir-pdf-generator: Create PDFs with wkhtmltopdf or puppeteer/chromium from Elixir.
GitHub - gutschilla/elixir-pdf-generator: Create PDFs with wkhtmltopdf or puppeteer/chromium from Elixir.
GitHub - antirez/disque: Disque is a distributed message broker
GitHub - antirez/disque: Disque is a distributed message broker
GitHub - jcomellas/ex_hl7: HL7 Parser for Elixir
GitHub - jcomellas/ex_hl7: HL7 Parser for Elixir
GitHub - Cirru/parser.ex: Cirru Parser in Elixir
GitHub - Cirru/parser.ex: Cirru Parser in Elixir
GitHub - thiamsantos/pwned: Check if your password has been pwned
GitHub - thiamsantos/pwned: Check if your password has been pwned
GitHub - suvash/hulaaki: DEPRECATED : An Elixir library (driver) for clients communicating with MQTT brokers(via the MQTT 3.1.1 protocol).
GitHub - suvash/hulaaki: DEPRECATED : An Elixir library (driver) for clients communicating with MQTT brokers(via the MQTT 3.1.1 protocol).
GitHub - sinetris/factory_girl_elixir: Minimal implementation of Ruby's factory_girl in Elixir.
GitHub - sinetris/factory_girl_elixir: Minimal implementation of Ruby's factory_girl in Elixir.
GitHub - navinpeiris/ex_unit_notifier: Desktop notifications for ExUnit
GitHub - navinpeiris/ex_unit_notifier: Desktop notifications for ExUnit
GitHub - DefactoSoftware/test_selector: Elixir library to help selecting the right elements in your tests.
GitHub - DefactoSoftware/test_selector: Elixir library to help selecting the right elements in your tests.
GitHub - xerions/ecto_migrate: Automatic migrations for ecto
GitHub - xerions/ecto_migrate: Automatic migrations for ecto
GitHub - meh/reagent: You need more reagents to conjure this server.
GitHub - meh/reagent: You need more reagents to conjure this server.
GitHub - stevegraham/hypermock: HTTP request stubbing and expectation Elixir library
GitHub - stevegraham/hypermock: HTTP request stubbing and expectation Elixir library
GitHub - msharp/elixir-statistics: Statistical functions and distributions for Elixir
GitHub - msharp/elixir-statistics: Statistical functions and distributions for Elixir
GitHub - Joe-noh/colorful: colorful is justice
GitHub - Joe-noh/colorful: colorful is justice
GitHub - ijcd/taggart: HTML as code in Elixir
GitHub - ijcd/taggart: HTML as code in Elixir
Build software better, together
Build software better, together
GitHub - yeshan333/ex_integration_coveralls: A library for run-time system code line-level coverage analysis.
GitHub - yeshan333/ex_integration_coveralls: A library for run-time system code line-level coverage analysis.
GitHub - PSPDFKit-labs/cobertura_cover: Output test coverage information in Cobertura-compatible format
GitHub - PSPDFKit-labs/cobertura_cover: Output test coverage information in Cobertura-compatible format
GitHub - basho/enm: Erlang driver for nanomsg
GitHub - basho/enm: Erlang driver for nanomsg
GitHub - pawurb/ecto_psql_extras: Ecto PostgreSQL database performance insights. Locks, index usage, buffer cache hit ratios, vacuum stats and more.
GitHub - pawurb/ecto_psql_extras: Ecto PostgreSQL database performance insights. Locks, index usage, buffer cache hit ratios, vacuum stats and more.
GitHub - crate/craterl: Client Libraries for Erlang
GitHub - crate/craterl: Client Libraries for Erlang
GitHub - sheharyarn/ecto_rut: Ecto Model shortcuts to make your life easier! :tada:
GitHub - sheharyarn/ecto_rut: Ecto Model shortcuts to make your life easier! :tada:
Elixir
More on Elixir

Programming Tips & Tricks

Code smarter, not harder—insider tips and tricks for developers.

Error Solutions

Turn frustration into progress—fix errors faster than ever.

Shortcuts

The art of speed—shortcuts to supercharge your workflow.
  1. Collections 😎
  2. Frequently Asked Question's 🤯

Tools

available to use.

Made with ❤️

to provide resources in various ares.