I would like to iterate over a Vec<T>, but also pass a struct instance to my function.
The idea is that I can make a copy of the struct instance separately within each process and modify each copied struct instance based off of initial conditions that are stored in the Vec<T>.
Once again, I have a set of initial conditions that are stored in a Vec that I would like to use iteratively using .iter() to modify a set of struct instance copies.
My naive guess is that I would have to create an additional Vec<StructType> with the same length as Vec<T> and then create many copies inside of my struct instance within that Vec<StructType>, but I wanted to know if there was a more efficient way where each process could create a copy.
Here is an outline of what I am trying to do, though I am not sure what the best way to pass the struct_instance to my function is.
// --- PreProcessing ---
let struct_instance <StructType> = read_inputs(json);
// --- Iteration ---
let initial_conditions: Vec<i32> = (1..5).collect();
let test: Vec<i32> = initial_conditions
.iter()
.map(calculation_function)
.collect();
I have left off the definition of the read_inputs and calculation_function from the code snippet because I feel that the full definition might detract from the main point of the question.
I later would like to parallelize this task with rayon, which is why I have chosen to use the .iter() approach.
iter::repeat(SomeStruct { .. })will give you an iterator that repeats the initial struct definition.initial_condition.iter().zip(iter::repeat(SomeStruct { .. })will give you an iterator that gives you a tuple(initial_condition, some_struct)for each value contained in the initial_condition collection.A full example would be something like the below. I changed the type of test from
i32toSomeStructsince it seems like you're wanting to collect modified versions of the initial struct, but I might be misunderstanding your requirement.