pub trait Permutation<'a> {
    type Permutator: Iterator;

    fn permutation(&'a mut self) -> Self::Permutator;
}
Expand description

Create a permutation iterator that permute data in place. Built-in implementation return an object of HeapPermutation for slice/array and Vec. It return an object of HeapPermutationCellIter on data type of Rc<RefCell<&mut [T]>>.

Example

For typical permutation:

use permutator::Permutation;
let mut data = vec![1, 2, 3];
data.permutation().for_each(|p| {
    // call multiple times. It'll print [2, 1, 3], [3, 1, 2], 
    // [1, 3, 2], [2, 3, 1], and [3, 2, 1] respectively.
    println!("{:?}", p);
});

For k-permutation:

use permutator::{Combination, Permutation};
let data = [1, 2, 3, 4, 5];
let k = 3;

data.combination(k).for_each(|mut combination| {
    // print the first combination
    println!("{:?}", combination);
    combination.permutation().for_each(|permuted| {
        // print permutation of each combination
        println!("{:?}", permuted);
    });
});
// All k-permutation printed

See

Required Associated Types

A permutation generator for a collection of data.

See

Required Methods

Create a permutation based on Heap’s algorithm. It return HeapPermutation object.

Implementations on Foreign Types

Generate permutation on an array or slice of T It return HeapPermutation

Use HeapPermutation as permutation generator

Generate permutation on a Vec of T It return HeapPermutation

Use HeapPermutation as permutation generator

Generate a sharable permutation inside Rc<RefCell<&mut [T]>> It return HeapPermutationCellIter

Use HeapPermutationCellIter as permutation generator

Generate permutation a mutable pointer to slice of T It return HeapPermutation

Warning

This implementation hid unsafe inside the permutation function but doesn’t provide any additional safety. User need to treat the return object as unsafe.

Use HeapPermutation as permutation generator

Implementors