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
i32
toSomeStruct
since it seems like you're wanting to collect modified versions of the initial struct, but I might be misunderstanding your requirement.