Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/grantila/rotated-array-set
Set of (possibly rotated) arrays
https://github.com/grantila/rotated-array-set
array arrays arrayset rotate rotated set
Last synced: about 1 month ago
JSON representation
Set of (possibly rotated) arrays
- Host: GitHub
- URL: https://github.com/grantila/rotated-array-set
- Owner: grantila
- License: mit
- Created: 2021-04-01T20:40:55.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-02-02T20:56:29.000Z (almost 2 years ago)
- Last Synced: 2024-04-24T18:41:44.708Z (8 months ago)
- Topics: array, arrays, arrayset, rotate, rotated, set
- Language: TypeScript
- Homepage:
- Size: 1.19 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![npm version][npm-image]][npm-url]
[![downloads][downloads-image]][npm-url]
[![build status][build-image]][build-url]
[![coverage status][coverage-image]][coverage-url]
[![Node.JS version][node-version]][node-url]# rotated-array-set
`RotatedArraySet` is a class looking a bit like the built-in [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) but is a set of arrays of `T`, and treats rotated arrays as "same".
# API
Construct a `RotatedArraySet`, optionally provide a *stringify* method, converting `T` to `string` (this is not necessary for primitive types).
## Versions
* Since v2 this is a [pure ESM][pure-esm] package, and requires Node.js >=12.20. It cannot be used from CommonJS.
* Since v3 requires Node.js >= 14.13.1.## Example
```ts
import { RotatedArraySet } from 'rotated-array-set'const tree = new RotatedArraySet< string >( );
tree.insert( [ 'a', 'b', 'c' ] );
tree.insert( [ 'x', 'y' ] );
tree.insert( [ 'c', 'a', 'b' ] ); // won't insert, already has this but rotated
tree.insert( [ 'y', 'x' ] ); // won't insert, same reasontree.has( [ 'b', 'c', 'a' ] ); // true
tree.has( [ 'c', 'b', 'a' ] ); // false - this isn't *rotated*tree.values( ); // [ [ 'a', 'b', 'c' ], [ 'x', 'y' ] ]
```Provide a custom stringifier:
```ts
import { RotatedArraySet } from 'rotated-array-set'const tree = new RotatedArraySet< User >( user => `${user.first} ${user.last}` );
tree.insert( [ user1, user2, user3 ] );
tree.insert( [ user3, user1, user2 ] ); // won't insert, already has this but rotatedtree.has( [ user2, user3, user1 ] ); // true
tree.has( [ user3, user2, user1 ] ); // false - not *rotated*tree.values( ); // [ [ user1, user2, user3 ] ]
```[npm-image]: https://img.shields.io/npm/v/rotated-array-set.svg
[npm-url]: https://npmjs.org/package/rotated-array-set
[downloads-image]: https://img.shields.io/npm/dm/rotated-array-set.svg
[build-image]: https://img.shields.io/github/actions/workflow/status/grantila/rotated-array-set/master.yml?branch=master
[build-url]: https://github.com/grantila/rotated-array-set/actions?query=workflow%3AMaster
[coverage-image]: https://coveralls.io/repos/github/grantila/rotated-array-set/badge.svg?branch=master
[coverage-url]: https://coveralls.io/github/grantila/rotated-array-set?branch=master
[node-version]: https://img.shields.io/node/v/rotated-array-set
[node-url]: https://nodejs.org/en/
[pure-esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c