Sort input array, return sorted ids of the array items, keeping the initial array unchanged.
Useful to perform linked sorting of multiple arrays, where linked array[s] should be sorted the same way as the primary one.
import sortIds from 'sort-ids'
import reorder from 'array-rearrange'
const rates = [.12, .47, .52, .97, ...sourceNumbers]
const names = ['John', 'Alexa', 'Jimmy', 'Kate', ...linkedItems]
const ids = sortIds(rates)
const sortedRates = reorder(rates, ids)
const sortedNames = reorder(names, ids)
ids = sortIds(array, ids?, precise=true)
Calculate ids corresponding to sorted input array. The input array isn't changed. Optionally pass input ids
- some initial order of ids. precise
flag makes sure no missorts took place and resolves them, if any. Disabling that can save ~30ms
for 1e6
items input arrays.
See also array-rearrange for reordering input array based on a list of ids.
Motivation
This package is >= 6 times faster compared to sorting function. That is achieved by packing input value - id
pairs into a single float64
value and performing native sort on that Float64Array, then unpacking the ids
back.
Acknowledgement
The idea was proposed by Robert Monfera for snap-points-2d and eventually implemented. But there may be other applications, like sorting colors etc.
License
(c) 2018 Dmitry Iv. MIT License