All Projects → ehmicky → fast-cartesian

ehmicky / fast-cartesian

Licence: Apache-2.0 license
Fast cartesian product

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to fast-cartesian

combinatoricslib
Combinatorial Objects Generators for Java 7+.
Stars: ✭ 83 (+62.75%)
Mutual labels:  combinatorics, combinations, cartesian-products
react-wisteria
Managing the State with the Golden Path
Stars: ✭ 18 (-64.71%)
Mutual labels:  functional, lodash, lodash-fp
Abacus
Advanced Combinatorics and Algebraic Number Theory Symbolic Computation library for JavaScript, Python
Stars: ✭ 16 (-68.63%)
Mutual labels:  combinatorics, combinations
streamplify
Java 8 combinatorics-related streams and other utilities
Stars: ✭ 40 (-21.57%)
Mutual labels:  combinatorics, combinations
RcppAlgos
Tool for Solving Problems in Combinatorics and Computational Mathematics
Stars: ✭ 31 (-39.22%)
Mutual labels:  combinatorics, combinations
rudash
Rudash - Lodash for Ruby Apps
Stars: ✭ 27 (-47.06%)
Mutual labels:  functional, lodash
combinate
Combinatorics generator for JavaScript and Typescript.
Stars: ✭ 20 (-60.78%)
Mutual labels:  combinatorics, combinations
dart-more
More Dart — Literally.
Stars: ✭ 81 (+58.82%)
Mutual labels:  functional, iterable
iterum
Handling iterables like lazy arrays.
Stars: ✭ 28 (-45.1%)
Mutual labels:  functional, iterable
vallang
Generic immutable recursive data representation API targeted at source code models and more.
Stars: ✭ 28 (-45.1%)
Mutual labels:  functional, sets
Nspl
Non-Standard PHP Library - functional primitives toolbox and more
Stars: ✭ 365 (+615.69%)
Mutual labels:  functional, lodash
Pydash
The kitchen sink of Python utility libraries for doing "stuff" in a functional way. Based on the Lo-Dash Javascript library.
Stars: ✭ 728 (+1327.45%)
Mutual labels:  functional, lodash
transmute
kind of like lodash but works with Immutable
Stars: ✭ 35 (-31.37%)
Mutual labels:  functional
BuBBLE
A DSL/LISP dialect written in Haskell
Stars: ✭ 20 (-60.78%)
Mutual labels:  functional
lancet
A comprehensive, efficient, and reusable util function library of go.
Stars: ✭ 2,228 (+4268.63%)
Mutual labels:  lodash
string-combinations
A simple, low-memory footprint function to generate all string combinations from a series of characters.
Stars: ✭ 25 (-50.98%)
Mutual labels:  combinations
Fae
A functional module for Deno inspired from Ramda.
Stars: ✭ 44 (-13.73%)
Mutual labels:  functional
grand central
State-management and action-dispatching for Ruby apps
Stars: ✭ 20 (-60.78%)
Mutual labels:  functional
rubyshops
An address book of French Companies using Ruby
Stars: ✭ 95 (+86.27%)
Mutual labels:  product
significa.co
Significa - A digital design-led agency focused on product development.
Stars: ✭ 72 (+41.18%)
Mutual labels:  product

Node Browsers TypeScript Codecov Minified size Mastodon Medium

Fast cartesian product.

Retrieves every possible combination between several arrays (cartesian product).

Fastest available library in JavaScript.

When producing millions of combinations or combining hundreds of arrays, big-cartesian should be used instead.

Hire me

Please reach out if you're looking for a Node.js API or CLI engineer (10 years of experience). Most recently I have been Netlify Build's and Netlify Plugins' technical lead for 2.5 years. I am available for full-time remote positions in either US or EU time zones.

Testimonials

We are now using this library for ourworldindata.org and have seen an almost 50-fold performance increase from the naive method we used before!

@MarcelGerber

Example

import fastCartesian from 'fast-cartesian'

console.log(
  fastCartesian([
    ['red', 'blue'],
    ['circle', 'square'],
  ]),
)
// [
//   [ 'red', 'circle' ],
//   [ 'red', 'square' ],
//   [ 'blue', 'circle' ],
//   [ 'blue', 'square' ]
// ]

// Return initial indexes
console.log(
  fastCartesian(
    [
      ['red', 'blue'],
      ['circle', 'square'],
    ].map(Object.entries),
  ),
)
// [
//   [ [ '0', 'red' ], [ '0', 'circle' ] ],
//   [ [ '0', 'red' ], [ '1', 'square' ] ],
//   [ [ '1', 'blue' ], [ '0', 'circle' ] ],
//   [ [ '1', 'blue' ], [ '1', 'square' ] ]
// ]

Demo

You can try this library:

Install

npm install fast-cartesian

This package works in both Node.js >=14.18.0 and browsers.

This is an ES module. It must be loaded using an import or import() statement, not require(). If TypeScript is used, it must be configured to output ES modules, not CommonJS.

API

fastCartesian(inputs)

inputs: Array<Array>
Return value: Array<Array>

Returns a two-dimensional Array where each row is a combination of inputs.

Benchmarks

The following benchmarks compare the performance of this library against alternatives (big-cartesian, cartesian-product, fast-cartesian-product, power-cartesian-product, cartesian and lodash.product).

## fast-cartesian ######################
1 array                           1.08ms
2 arrays                          1.15ms
4 arrays                          2.81ms
8 arrays                          1.60ms
16 arrays                         4.28ms

## cartesian-product ###################
1 array                           3.56ms
2 arrays                          2.72ms
4 arrays                         11.21ms
8 arrays                         13.41ms
16 arrays                        19.29ms

## big-cartesian #######################
1 array                           7.73ms
2 arrays                          7.40ms
4 arrays                          8.70ms
8 arrays                          4.46ms
16 arrays                        17.28ms

## power-cartesian-product #############
1 array                           6.15ms
2 arrays                          7.96ms
4 arrays                         11.84ms
8 arrays                         17.37ms
16 arrays                        19.38ms

## cartesian ###########################
1 array                           6.63ms
2 arrays                         16.03ms
4 arrays                         17.82ms
8 arrays                         22.11ms
16 arrays                        33.21ms

## fast-cartesian-product ##############
1 array                          13.75ms
2 arrays                         17.22ms
4 arrays                         23.89ms
8 arrays                         39.08ms
16 arrays                        61.45ms

## lodash.product ######################
1 array                          36.66ms
2 arrays                         37.85ms
4 arrays                         41.69ms
8 arrays                         50.38ms
16 arrays                        73.87ms

Support

For any question, don't hesitate to submit an issue on GitHub.

Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.

Contributing

This project was made with ❤️. The simplest way to give back is by starring and sharing it online.

If the documentation is unclear or has a typo, please click on the page's Edit button (pencil icon) and suggest a correction.

If you would like to help us fix a bug or add a new feature, please check our guidelines. Pull requests are welcome!


ehmicky

💻 🎨 🤔 📖

Marcel Gerber

💻

Paul Heidenreich

💻
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].