我想重写一个Vec<T>
,但也要给我的函数传递一个struct示例。
这个想法是,我可以在每个进程中单独复制结构体示例,并根据存储在Vec<T>
中的初始条件修改每个复制的结构体示例。
同样,我有一组存储在Vec中的初始条件,我想使用.iter()
迭代地修改一组结构示例副本。
我天真的猜测是,我必须创建一个额外的Vec<StructType>
,其长度与Vec<T>
相同,然后在该Vec<StructType>,
中的struct示例内创建许多副本,但我想知道是否有更有效的方法,每个进程都可以创建副本。
下面是我尝试做的事情的概述,尽管我不确定将struct_instance
传递给我的函数的最佳方式是什么。
// --- 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();
字符串
我在代码片段中省略了read_inputs
和calculation_function
的定义,因为我觉得完整的定义可能会偏离问题的要点。
稍后我想用rayon并行化这个任务,这就是为什么我选择使用.iter()
方法的原因。
1条答案
按热度按时间yhxst69z1#
iter::repeat(SomeStruct { .. })
将给予一个迭代器,重复初始结构定义。initial_condition.iter().zip(iter::repeat(SomeStruct { .. })
将给予一个迭代器,该迭代器为initial_condition集合中包含的每个值提供一个元组(initial_condition, some_struct)
。一个完整的例子如下所示:我将测试类型从
i32
改为SomeStruct
,因为你似乎想收集初始结构的修改版本,但我可能误解了你的要求。字符串