Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bacali95/sweet-collections
Typescript implementations of in-memory cache data-structures for Node and Browser.
https://github.com/bacali95/sweet-collections
avl-tree collections heap lfu-cache lru-cache sorted-array sorted-map sorted-set
Last synced: 13 days ago
JSON representation
Typescript implementations of in-memory cache data-structures for Node and Browser.
- Host: GitHub
- URL: https://github.com/bacali95/sweet-collections
- Owner: bacali95
- License: mit
- Created: 2020-10-30T23:30:01.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2023-07-20T17:52:06.000Z (over 1 year ago)
- Last Synced: 2024-09-23T05:50:41.118Z (about 2 months ago)
- Topics: avl-tree, collections, heap, lfu-cache, lru-cache, sorted-array, sorted-map, sorted-set
- Language: TypeScript
- Homepage:
- Size: 33.5 MB
- Stars: 4
- Watchers: 0
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Sweet Collections
![Build](https://github.com/bacali95/sweet-collections/workflows/Build/badge.svg)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)
![Coverage](coverage/badge.svg)
[![npm version](https://badge.fury.io/js/sweet-collections.svg)](https://badge.fury.io/js/sweet-collections)Typescript implementations of in-memory cache data-structures for Node and Browser. These data-structures are:
- **LruMap**: A fixed size `Map` which removes the least recently used entry.
- **LruSet**: A fixed size `Set` which removes the least recently used entry. (Backed by a `LruMap`)
- **LfuMap**: A fixed size `Map` which removes the least frequently used entry.
- **LfuSet**: A fixed size `Set` which removes the least frequently used entry. (Backed by a `LfuMap`)
- **SortedArray**: An `Array` that stays sorted after any modification.
- **SortedMap**: A `Map` with entries stays sorted by key after any modification. (Backed by a `SortedArray`)
- **SortedSet**: A `Set` with entries stays sorted after any modification. (Backed by a `SortedArray`)
- **Heap**: A collection that have always the largest, smallest or most relevant value on top.
- **Stack**: A collection that have always the last added value on top.
- **Queue**: A collection that have always the first added value on top.## Install
```sh
npm install --save sweet-collections
```or
```sh
yarn add sweet-collections
```## Usage
LruMap
```Typescript
import { LruMap } from 'sweet-collections';const map = new LruMap(3);
map.set(1, 1);
map.set(2, 2);
map.set(3, 3); // least recent used: 1
console.log(map.has(1)) // true, least recent used: 2
console.log(map.get(2)) // 1, least recent used: 3map.set(4, 4);
console.log(map.has(3)) // false
console.log(map.get(3)) // undefinedconsole.log(map.isFull()) // true
map.delete(1);
console.log(map.size) // 2map.clear();
console.log(map.size) // 0
```LruSet
```Typescript
import { LruSet } from 'sweet-collections';const set = new LruSet(3);
set.add(1);
set.add(2);
set.add(3); // least recent used: 1
console.log(set.has(1)) // true, least recent used: 2set.add(4);
console.log(set.has(2)) // falseconsole.log(set.isFull()) // true
set.delete(1);
console.log(set.size) // 2set.clear();
console.log(set.size) // 0
```LfuMap
```Typescript
import { LfuMap } from 'sweet-collections';const map = new LfuMap(3);
map.set(1, 1);
map.set(2, 2);
map.set(3, 3); // least frequently used: 1
console.log(map.has(1)) // true, least frequently used: 2
console.log(map.get(2)) // 1, least frequently used: 3map.set(4, 4);
console.log(map.has(3)) // false
console.log(map.get(3)) // undefinedconsole.log(map.isFull()) // true
map.delete(1);
console.log(map.size) // 2map.clear();
console.log(map.size) // 0
```LfuSet
```Typescript
import { LfuSet } from 'sweet-collections';const set = new LfuSet(3);
set.add(1);
set.add(2);
set.add(3); // least frequently used: 1
console.log(set.has(1)) // true, least frequently used: 2
console.log(set.has(2)) // true, least frequently used: 3set.add(4);
console.log(set.has(3)) // falseconsole.log(set.isFull()) // true
set.delete(1);
console.log(set.size) // 2set.clear();
console.log(set.size) // 0
```SortedArray
```Typescript
import { SortedArray } from 'sweet-collections';// Increasing order sorted array
const array = new SortedArray((a: number, b: number) => a - b);
array.push(4);
array.push(1);
array.push(2);
array.push(3);
array.push(5);
console.log(array.toArray()); // [1, 2, 3, 4, 5]
console.log(array.get(2)); // 3
console.log(array.get(4)); // 5
console.log(array.length); // 5array.delete(4);
console.log(array.toArray()); // [1, 2, 3, 5]
console.log(array.includes(4)); // falsearray.push(1);
console.log(array.toArray()); // [1, 1, 2, 3, 5]
console.log(array.count(1)); // 2
console.log(array.firstIndexOf(1)); // 0
console.log(array.lastIndexOf(1)); // 1console.log(array.shift()); // 1
console.log(array.pop()); // 1
console.log(array.min()); // 1
console.log(array.max()); // 3
console.log(array.toArray()); // [1, 2, 3]
```SortedMap
```Typescript
import { SortedMap } from 'sweet-collections';// Increasing order sorted map
const map = new SortedMap((a: number, b: number) => a - b);
map.set(3, 'c');
map.set(2, 'd');
map.set(5, 'a');
map.set(4, 'b');
map.set(1, 'e');
console.log([...map.keys()]); // [1, 2, 3, 4, 5]
console.log([...map.values()]); // ["e", "d", "c", "b", "a"]
console.log(map.get(2)); // "d"
console.log(map.get(4)); // "b"
console.log(map.size); // 5map.delete(4);
console.log([...map.keys()]); // [1, 2, 3, 5]
console.log([...map.values()]); // ["e", "d", "c", "a"]
console.log(map.has(4)); // false
```SortedSet
```Typescript
import { SortedSet } from 'sweet-collections';// Increasing order sorted set
const set = new SortedSet((a: number, b: number) => a - b);
set.add(3);
set.add(2);
set.add(5);
set.add(4);
set.add(1);
console.log([...set.keys()]); // [1, 2, 3, 4, 5]
console.log(set.has(2)); // true
console.log(set.has(4)); // true
console.log(set.size); // 5set.delete(4);
console.log([...set.keys()]); // [1, 2, 3, 5]
console.log(set.has(4)); // false
```Heap
```Typescript
import { Heap } from 'sweet-collections';// Heap with the maximum value on top
const heap = new Heap((a: number, b: number) => a > b);
heap.push(3);
heap.push(2);
heap.push(5);
heap.push(4);
heap.push(1);
console.log(heap.peek()); // 5
console.log(heap.pop()); // 5
console.log(heap.peek()); // 4
console.log(heap.replace(0)); // 4
console.log(heap.peek()); // 3
```Stack
```Typescript
import { Stack } from 'sweet-collections';const stack = new Stack();
stack.push(3);
stack.push(2);
console.log(stack.top()); // 2
stack.push(5, 4, 1);
console.log(stack.pop()); // 1
console.log(stack.top()); // 4
console.log(stack.size); // 4
```Queue
```Typescript
import { Queue } from 'sweet-collections';const queue = new Queue();
queue.push(3);
queue.push(2);
console.log(queue.pop()); // 3
queue.push(5, 4, 1);
console.log(queue.pop()); // 2
console.log(queue.peek()); // 5
console.log(queue.size); // 3
```## Author
👤 **Nasreddine Bac Ali**
- Website: [nasreddinebacali.info](https://nasreddinebacali.info)
- Github: [@bacali95](https://github.com/bacali95)
- LinkedIn: [@bacali](https://linkedin.com/in/bacali)## Show your support
Give a ⭐️ if this project helped you!
## 📝 License
Copyright © 2021 [Nasreddine Bac Ali](https://github.com/bacali95). This project
is [ISC](https://github.com/bacali95/sweet-collections/blob/master/LICENSE) licensed.