Indxvec
Description
This crate is lightweight and has no dependencies.
The facilities provided are:
- ranking, sorting, merging, searching, indexing, selecting, partitioning
- general operations on/with indices
- set operations
- printing of generic slices and slices of vectors
- macro for easy error reporting
Usage
Import into your source file(s) constants GR,UN
for colour printing, struct MinMax
, macro here!()
and tof64
auxiliary function, if needed
use indxvec::{GR,UN,MinMax,here,tof64};
Use traits Indices
and/or Printing
use indxvec::{Indices,Printing};
Trait Indices
is implemented on type &[usize]
, i.e. slices of subscripts to slices and vectors.
Trait Printing
provides utility methods to stringify (serialise for printing) generic slices and slices of vecs.
Optionally, it enables printing in bold green for adding emphasis (see tests/tests.rs
).
Use functions from merge.rs
use indxvec::{merge::*};
These functions are applicable to generic slices &[T]
. Thus they will work on Rust primitive end types, such as f64. They can also work on slices holding any arbitrarily complex end type T
, as long as the required traits, mostly just PartialOrd
and/or Copy
, are implemented for T
.
The following statement will import everything:
use indxvec::{GR,UN,MinMax,here,tof64,merge::*,Indices,Printing};
Testing
It is highly recommended to read and run tests/tests.rs
to learn from examples of usage. Use a single thread to run them. It may be a bit slower but it will write the results in the right order:
cargo test --release -- --test-threads=1 --nocapture --color always
Trait Indices
The methods of this trait are implemented for slices of subscripts, i.e. they take the type &[usize]
as input (self) and produce new index Vec<usize>
, new data vector Vec<T>
, or other results as appropriate:
/// Methods to manipulate indices of `Vec<usize>` type.
Trait Printing
This trait is implemented for generic individual items T
, for slices &[T]
and for slices of vecs &[Vec<T>]
/// Trait to serialize slices of generic items (vectors) and slices of
/// Vecs of generic items (matrices). Turns them all into printable strings.
Functions Signatures
Functions in module src/merge.rs
:
/// Maximum value T of slice &[T]
Release Notes (Latest First)
Version 1.0.8 - Dependencies reorganization to minimise the footprint. The random numbers generation has now been moved to its own new crate ran
and added here just as a development dependency.
Version 1.0.7 - Renamed function occurs
to occurs_multiple
and added a simple linear count of item occurences: occurs
.
Version 1.0.6 - Some cosmetic changes to the code, readme and tests, no change of functionality.
Version 1.0.5 - Added partition_indexed
for partitioning into two sets of indices about a pivot. Moved all random number generating functions into new module random.rs
(import changed to: random::*
). Moved the implementations of Printing trait to new module printing.rs
(this has no effect on users).
Version 1.0.4 - here!() now highlights the (first) error in bold red. Added fast random number generation functions ranf64, ranv64, ranvu8, ranvvf64, rannvvu8
.
Version 1.0.3 - Added utilities functions maxt, mint, minmaxt
. Rationalised the functions for printing generic slices and slices of vectors. They are now turned into two chainable methods in trait Printing
: .to_str()
and .gr()
. The latter also serialises slices to strings but additionally makes them bold green.
Version 1.0.2 - Added function occurs
that efficiently counts occurrences of specified items in a set with repetitions.
Version 1.0.1 - Some code style tidying up. Added function binsearchdesc
for completeness and symmetry with binsearch
.
Version 1.0.0 - indxvec
has been stable for some time now, so it gets promoted to v1.0.0. There are some improvements to README.md
to mark the occasion.
Version 0.2.12 - added utility function printvv
to prettyprint vectors of vectors.
Version 0.2.11 - added some badges and improved readme
.
Version 0.2.9 - added struct MinMax for returning values from function 'minmax' and displaying them. Removed function wt
used previously for displaying them as tuples.
Version 0.2.6 - added unindexf64
for convenience. Same as unindex
but the output is always converted to Vec<f64>
.
Version 0.2.5 - added memsearchdesc_indexed
= binary search of a descending indexed set.
Version 0.2.4 - added helper function wt
= write tuple. Added memsearchdesc
= binary search of a descending set.
Version 0.2.3 - general tidying up and readme update.
Version 0.2.2 - replaced GV and GI with functions wv
and wi
respectively. Added revindex
to Indices
trait, so that it can be functionally chained with its other methods.
Version 0.2.1 - moved GI from rstats
to here. Fixed minmax
.
Version 0.2.0 - added set operations: sansrepeat, member, memsearch, memsearch_indexed, unite, unite_indexed, intersect, intersect_indexed, diff, diff_indexed
. They are also used, with type/struct wrappers, by crate sets
.