我希望迭代Vec<T>,但也要将一个 struct 实例传递给我的函数.

其 idea 是,我可以在每个进程中分别复制 struct 实例,并根据存储在Vec<T>中的初始条件修改每个复制的 struct 实例.

再一次,我有一组存储在VEC中的初始条件,我想使用.iter()来反复使用它们来修改一组 struct 实例副本.

我天真的猜测是,我必须再创建一个长度与Vec<T>相同的Vec<StructType>个,然后在这Vec<StructType>,个 struct 实例中创建许多副本,但我想知道是否有更有效的方法,每个进程都可以创建一个副本.

以下是我正在try 做的事情的大纲,尽管我不确定将这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_inputscalculation_function的定义,因为我觉得完整的定义可能会偏离问题的要点.

稍后,我想将这项任务与人造丝并行化,这就是为什么我 Select 使用.iter()方法.

推荐答案

iter::repeat(SomeStruct { .. })将为您提供重复初始 struct 定义的迭代器.

initial_condition.iter().zip(iter::repeat(SomeStruct { .. })将为您提供一个迭代器,该迭代器为初始条件集合中包含的每个值提供一个元组(initial_condition, some_struct).

完整的示例如下所示.我将测试类型从i32更改为SomeStruct,因为您似乎希望收集修改后的初始 struct 版本,但我可能误解了您的要求.

use std::iter;

#[derive(Clone, Debug)]
struct SomeStruct {
    value: i32,
}

fn main() {
    let structs = iter::repeat(SomeStruct { value: 0 });

    let initial_conditions: Vec<i32> = (1..5).collect();
    let test: Vec<SomeStruct> = initial_conditions
        .iter()
        .zip(structs)
        .map(|(initial_condition, mut somestruct)| {
            somestruct.value = *initial_condition;
            somestruct
        })
        .collect();

}

Rust相关问答推荐

如何找到一个数字在二维数组中的位置(S)?

如何处理动态 struct 实例化?

MutexGuard中的过滤载体不需要克隆

使用铁 rust S还原对多个数组执行顺序kronecker积

如何向下转换到MyStruct并访问Arc Mutex MyStruct实现的方法?

如何在函数中返回自定义字符串引用?

为什么`AlternateScreen`在读取输入键时需要按Enter键?

获取与父字符串相关的&;str的原始片段

在铁 rust 中,如何一次只引用几件事中的一件?

为什么rustc会自动降级其版本?

Windows 上 ndarray-linalg 与 mkl-stats 的链接时间错误

当我编译 Rust 代码时,我是否缺少 AVX512 的目标功能?

需要一个有序向量来进行 struct 初始化

当在lambda中通过引用传递时,为什么会出现终身/类型不匹配错误?

pyO3 和 Panics

(let b = MyBox(5 as *const u8); &b; ) 和 (let b = &MyBox(5 as *const u8); ) 之间有什么区别

在给定 Rust 谓词的情况下,将 Some 转换为 None 的惯用方法是什么?

是否可以预测堆栈溢出?

RAII 模式的 Rust 解决方案,用于在 new() 和 drop() 上修改另一个对象

为什么基于 clap::Parser 读取的大量数字进行计算比硬编码该数字时慢?