From 3f5e621b6b7fa6a47d65420295d175982f7d6e37 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sat, 2 Mar 2024 17:28:12 +0100 Subject: [PATCH] Finish implementing sort and shuffle features --- src/ui/sheet_listing.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/ui/sheet_listing.rs b/src/ui/sheet_listing.rs index 22d1c9e..773df85 100644 --- a/src/ui/sheet_listing.rs +++ b/src/ui/sheet_listing.rs @@ -108,13 +108,19 @@ fn sort_sheets(sheets: &mut FactoryVecDeque) { fn order_sheets(sheets: &mut FactoryVecDeque, order: &mut Vec) { assert!(sheets.len() == order.len()); + let mut wish_positions = vec![0; sheets.len()]; + for (i, i2) in order.iter().enumerate() { + wish_positions[*i2] = i; + } + for i in 0..sheets.len() { let new_i = order[i]; let old_i = i; if old_i != new_i { + order.swap(old_i, wish_positions[old_i]); + wish_positions.swap(old_i, new_i); sheets.guard().swap(old_i, new_i); - order.swap(old_i, new_i); } } } @@ -126,7 +132,7 @@ mod tests { #[test] fn test_sort() { - let original: Vec = (0..10).collect(); + let original: Vec = (0..100).collect(); let mut to_sort = original.clone(); to_sort.shuffle(&mut rand::thread_rng()); @@ -136,14 +142,22 @@ mod tests { order_builder.sort_by(|a, b| a.1.cmp(&b.1)); let mut order: Vec<_> = order_builder.into_iter().map(|(i, _)| i).collect(); + println!("Initial order: {:?}", order); + + let mut wish_positions = vec![0; to_sort.len()]; + for (i, i2) in order.iter().enumerate() { + wish_positions[*i2] = i; + } + for i in 0..to_sort.len() { let new_i = order[i]; let old_i = i; println!("Swap {} and {}", old_i, new_i); if old_i != new_i { + order.swap(old_i, wish_positions[old_i]); + wish_positions.swap(old_i, new_i); to_sort.swap(old_i, new_i); - order.swap(old_i, new_i); } println!("order: {:?} - to_sort: {:?}", order, to_sort); }