element.version === currentVersion)) { versionNodes.unshift({ version: currentVersion, url: "#" }); } document.querySelector("#project-version").innerHTML = versionNodes.reduce( (acc, element) => { const status = currentVersion === element.version ? "selected disabled" : ""; return ` ${acc} `; }, `
treelist · v1.0.2

treelist

Treelist implementation from glib (https://github.com/pendletong/glib) as a standalone module This implements an AVL tree to allow for a very fast list manipulation which performs best for larger lists where items are inserted rather than prepended

  • Benchmarks show around 3-6 times faster than a non-prepend addition to a standard gleam list with 1000 items
  • Arbitrary removal from a treelist becomes around 6 times faster than a standard list around 1000 items and this increases to about 40 times faster at 10000 items
  • Replacing arbitrary elements in a treelist is about 1.4 times faster with 100 items up to over 100 times faster for 10000 items.
  • Memory usage of a treelist appears to be reasonable and if the list is being constantly modified/added to/removed arbitrarily then usage seems to be lighter than for standard lists.

If the ability to access specific elements in a large array or removal of said elements is absolutely necessary and this needs to work in both erlang and javascript targets then this is a good option.

Package Version Hex Docs

gleam add treelist@1
import treelist

pub fn main() {
  let list = treelist.new()
  let assert Ok(new_list) = treelist.add(list, "Test")
  treelist.get(new_list, 0)
  // -> Ok("Test")
}

Further documentation can be found at https://hexdocs.pm/treelist.

Development

gleam run   # Run the project
gleam test  # Run the tests
Search Document