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 [1, 2, 3], [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
    combination.permutation().for_each(|permuted| {
        // print permutation of each combination
        println!("{:?}", permuted);
    });
});
// All k-permutation printed

See

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

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 mostly similar to HeapPermutation but it include an original value as first value return by Iterator.

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

Use HeapPermutation as permutation generator

Generate permutation on a Vec of T It return mostly similar to HeapPermutation but it include an original value as first value return by Iterator.

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

Use HeapPermutation as permutation generator

Generate a sharable permutation inside Rc<RefCell<&mut [T]>> It return HeapPermutationCellIter but it include an original value as first value return by Iterator.

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

Use HeapPermutationCellIter as permutation generator

Generate permutation a mutable pointer to slice of T It return HeapPermutation but it include an original value as first value return by Iterator.

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.

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

Use HeapPermutation as permutation generator

Implementors