[−][src]Crate co_sort
The simplest way to use this crate is the co_sort!and co_sort_stable! macros, it will sort the first array and swap elements of the others in order to mimic the changes in the first array.
Usefull when you have multiple slices with an implicit relation.
#[macro_use] extern crate co_sort; use co_sort::*; let mut names = ["Diego", "Maia", "Luciana", "Bruno", "Astrid", "Thierry"]; let mut ages = [ 73, 88, 21, 47, 4, 62 ]; // We want to sort the names but keep the ages synced co_sort![names, ages]; assert_eq!(names, ["Astrid", "Bruno", "Diego", "Luciana", "Maia", "Thierry"]); assert_eq!(ages, [ 4, 47, 73, 21, 88, 62 ]);
If you want more control you can use the functions co_sort and co_sort_stable.
co_sort_stable allocates O(n) memory and requires the types to implement Clone while co_sort is in place and doesn't require any trait.
Performance wise co_sort scale well with the number of arrays but not with their size and co_sort_stable is the opposite.
let mut names = ["Diego", "Maia", "Luciana", "Bruno", "Astrid", "Thierry"]; let mut ages = [ 73, 88, 21, 47, 4, 62 ]; let permutation = Permutation::from(names.as_ref()); permutation.co_sort((names.as_mut(), ages.as_mut())); // or permutation.co_sort_stable((names.as_mut(), ages.as_mut())); assert_eq!(names, ["Astrid", "Bruno", "Diego", "Luciana", "Maia", "Thierry"]); assert_eq!(ages, [ 4, 47, 73, 21, 88, 62 ]);
Macros
co_sort | |
co_sort_stable |
Structs
Permutation |
Traits
CoSort | If you want to implement CoSort on your type nothing simpler. |
CoSortStable | If you want to implement CoSortStable on your type nothing simpler. |