From 2d06d28c7bbe89dccfbd4bda1acfb74c654e0001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20Kaan=20G=C3=9CM=C3=9C=C5=9E?= <96421894+Tahinli@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:20:40 +0300 Subject: [PATCH] refactor: :recycle: all for loops are now iterator except basic counters --- artificial_bee_colony/src/bee.rs | 2 +- artificial_bee_colony/src/food.rs | 27 ++++++++------ artificial_bee_colony/src/utils.rs | 57 +++++++++++++++++------------- 3 files changed, 50 insertions(+), 36 deletions(-) diff --git a/artificial_bee_colony/src/bee.rs b/artificial_bee_colony/src/bee.rs index 3750272..21b9575 100644 --- a/artificial_bee_colony/src/bee.rs +++ b/artificial_bee_colony/src/bee.rs @@ -24,7 +24,7 @@ impl Bee { let probabilities = food_sources .iter() - .map(|x| x.fitness_calculation / total_fitness) + .map(|food_source| food_source.fitness_calculation / total_fitness) .collect::>(); let onlooker_bee_count = input.food_source_number; diff --git a/artificial_bee_colony/src/food.rs b/artificial_bee_colony/src/food.rs index 998936d..3e19717 100644 --- a/artificial_bee_colony/src/food.rs +++ b/artificial_bee_colony/src/food.rs @@ -42,11 +42,10 @@ impl FoodSource { } fn calculate(decision_variables: Vec) -> f64 { - let mut result = 0.0; - for element in decision_variables { - result += element * element; - } - result + decision_variables + .iter() + .map(|element| element * element) + .sum() } pub fn create_food_sources( @@ -68,7 +67,11 @@ impl FoodSource { pub fn find_best_food_source(food_sources: &[FoodSource]) -> FoodSource { food_sources .iter() - .max_by(|x, y| x.fitness_calculation.total_cmp(&y.fitness_calculation)) + .max_by(|food_source_one, food_source_two| { + food_source_one + .fitness_calculation + .total_cmp(&food_source_two.fitness_calculation) + }) .unwrap() .clone() } @@ -77,7 +80,11 @@ impl FoodSource { let (most_tried_food_source_index, _) = food_sources .iter() .enumerate() - .max_by(|(_, x), (_, y)| x.try_counter.cmp(&y.try_counter)) + .max_by(|(_, food_source_one), (_, food_source_two)| { + food_source_one + .try_counter + .cmp(&food_source_two.try_counter) + }) .unwrap(); most_tried_food_source_index } @@ -90,9 +97,9 @@ impl fmt::Display for FoodSource { "function_calculation = {:e}\nfitness_calculation = {:e}\ncoordinates = [", self.function_calculation, self.fitness_calculation )?; - for coordinate in &self.coordinates { - writeln!(f, " {:e},", coordinate)?; - } + self.coordinates + .iter() + .try_for_each(|coordinate| writeln!(f, " {:e},", coordinate))?; write!(f, "]\ntry_counter = {}\n", self.try_counter) } } diff --git a/artificial_bee_colony/src/utils.rs b/artificial_bee_colony/src/utils.rs index 88d9602..7bccc02 100644 --- a/artificial_bee_colony/src/utils.rs +++ b/artificial_bee_colony/src/utils.rs @@ -20,16 +20,18 @@ pub struct Input { impl Input { pub fn get() -> Self { let mut read_file = false; - for arg in args().collect::>() { - match arg.as_str() { + + args() + .collect::>() + .iter() + .for_each(|arg| match arg.as_str() { "-r" | "--read_file" => read_file = true, "-h" | "--help" => { show_help(); exit(0); } _ => {} - } - } + }); if read_file { Input::read_config_file_input() @@ -84,13 +86,19 @@ impl Input { let config_file = File::open("abc_config.toml").unwrap(); let reader = BufReader::new(config_file); let mut words = vec![]; - for line in reader.lines().map(|x| x.unwrap()).collect::>() { - let mut parsed = line - .split('=') - .map(|x| x.trim().to_string()) - .collect::>(); - words.append(&mut parsed); - } + reader + .lines() + .map(|unchecked_line| unchecked_line.unwrap()) + .collect::>() + .iter() + .for_each(|line| { + words.append( + &mut line + .split('=') + .map(|splitted| splitted.trim().to_string()) + .collect::>(), + ) + }); if words[0].as_str() == "[start_parameters]" { for i in (1..words.len()).step_by(2) { match words[i].as_str() { @@ -129,12 +137,13 @@ pub fn give_output( run_counter: usize, ) { let mut write_file = false; - for arg in args().collect::>() { - match arg.as_str() { + args() + .collect::>() + .iter() + .for_each(|arg| match arg.as_str() { "-w" | "--write_file" => write_file = true, _ => {} - } - } + }); let mut print_buffer = vec![]; write!(print_buffer, "[{}]\n{}\n", run_counter, best_food_source).unwrap(); @@ -194,19 +203,17 @@ fn write_output_file(print_buffer: &[u8], run_counter: usize) { } fn arithmetic_mean(results: &[f64]) -> f64 { - let mut total_results = 0.0; - for function_result in results { - total_results += function_result - } - total_results / results.len() as f64 + results.iter().sum::() / results.len() as f64 } fn standard_deviation(results: &[f64], arithmetic_mean: f64) -> f64 { - let mut total_difference_square = 0.0; - for function_result in results { - total_difference_square += (function_result - arithmetic_mean).powi(2) - } - f64::sqrt(total_difference_square / (results.len() - 1) as f64) + f64::sqrt( + results + .iter() + .map(|function_result| (function_result - arithmetic_mean).powi(2)) + .sum::() + / (results.len() - 1) as f64, + ) } fn show_help() {