作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的用例是我想扫描一个迭代器,并在原始迭代器的段上产生累积值(这是一个标记器)。换句话说,它不是输入值和输出值之间的一对一映射。请注意 filter_map()
不会工作,因为我确实需要累加器值。
我找到了 .scan()
,这几乎是我想要的:
#![allow(unused)]
fn main() {
let a = [1, 2, 3];
let mut iter = a.iter().scan(1, |state, &x| {
if x == 2 {
return None;
}
// each iteration, we'll multiply the state by the element
*state = *state * x;
// then, we'll yield the negation of the state
Some(-*state)
});
println!("{:?}", &iter.next());
println!("{:?}", &iter.next());
println!("{:?}", &iter.next());
}
除了以上输出
Some(-1)
None
Some(-3)
当我想要它输出时
Some(-1)
Some(-3)
None
而且,不管你怎么想,这都行不通:
Some(-*state)
}).filter(|x| x.is_some());
因为我实际上并没有迭代
Option
s:
error[E0599]: no method named `is_some` found for reference `&{integer}` in the current scope
--> src/main.rs:15:21
|
15 | }).filter(|x| x.is_some());
| ^^^^^^^ method not found in `&{integer}`
所以这就像迭代器方法被故意屏蔽在“缺少屈服值”的情况下。
最佳答案
您可以使用 filter_map
并在迭代器外部的变量中创建自己的累加器:
fn main() {
let a = [1, 2, 3];
let mut state = 1;
let mut iter = a.iter().filter_map(|&x| {
if x == 2 {
return None;
}
// each iteration, we'll multiply the state by the element
state = state * x;
// then, we'll yield the negation of the state
Some(-state)
});
println!("{:?}", &iter.next()); // Some(-1)
println!("{:?}", &iter.next()); // Some(-3)
println!("{:?}", &iter.next()); // None
}
关于Rust:如何过滤掉 "None"排放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63145397/
我正在编写一个快速的 preg_replace 来从 CSS 中删除注释。 CSS 注释通常有这样的语法: /* Development Classes*/ /* Un-comment me for
使用 MySQL,我有三个表: 项目: ID name 1 "birthday party" 2 "soccer match" 3 "wine tasting evening" 4
我是一名优秀的程序员,十分优秀!