簡體   English   中英

在包含元組的結構的 VecDeque 上使用 iter().map

[英]Using iter().map on a VecDeque of struct containing tuples

我是 Rust 的新手。 我有以下問題:

pub struct Events {
    pub ts: u64,
    pub temperature_multiplier: (f64,f64), // (temperature,multiplier)
}

我有這個結構的 VecDeque

elements_vec: VecDeque<Events>

我希望能夠通過 VecDeque 的所有元素 go 並計算(溫度*乘數)的總和。

我試過的:

elements_vec.iter().map(|(_, (t,m))| t * m ).sum()

它返回一個錯誤,說“預期的結構事件”。

Events不是一個元組,而是一個結構。 您需要通過rust book 中的 Destructuring Structs 部分來 go

elements_vec.iter().map(|Events { temperature_multiplier: (t, m), .. }| t * m).sum::<f64>()

我是這樣理解你的問題的:

let mut elements_vec: VecDeque<Events> = VecDeque::with_capacity(10);
elements_vec.push_back(Events { ts: 0x0002, temperature_multiplier: (20.0, 2.0) });
elements_vec.push_back(Events { ts: 0x0003, temperature_multiplier: (30.0, 3.0) });
elements_vec.push_front(Events { ts: 0x0001, temperature_multiplier: (10.0, 1.0) });

println!("{:?}", &elements_vec);

let s : f64 = elements_vec.iter().map(|evnt| evnt.temperature_multiplier.0 * evnt.temperature_multiplier.1 ).sum();

println!("s: {}", s); // s: 140

答案在編譯器的消息中: map()需要struct Events ,我們將其作為map(|evnt| /* and use it here */) 它有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM