在锈病中有类似于mapMulti的东西吗?
我有以下人为的例子:
fn main() {
let buf = vec![1,2,3,4,5];
let mut sum = 0;
// sum even numbers and 1 in buf (1+2+4)
buf.iter().map(|x| {
if x % 2 == 0 {
(true, x)
} else {
if *x == 1 {
(true, x)
} else {
(false, x)
}
}
}).for_each(|(cond, n)| {
if cond {
sum += n;
}
});
println!("sum: {:?}", sum);
}产出:
sum: 7我宁愿写这样的东西,而不是更简洁的:
fn main() {
let buf = vec![1,2,3,4,5];
let mut sum = 0;
// sum even numbers and 1 in buf (1+2+4)
buf.iter().map_multi(|(x, consumer)| {
if x % 2 == 0 {
consumer.accept(x);
} else {
if *x == 1 {
consumer.accept(x)
}
}
}).for_each(|n| {
sum += n
});
println!("sum: {:?}", sum);
}这有可能在锈病中使用标准库吗?
发布于 2022-07-24 16:45:06
为了直接回答您的问题,filter_map完全按照您的要求执行(返回Some(x)而不是(true, x)和None而不是(false, x) )。但是,我会更简洁地编写您的代码:
fn main() {
let buf = vec![1, 2, 3, 4, 5];
let even_or_one = buf.iter().filter(|&&n| n == 1 || n % 2 == 0);
println!("sum: {:?}", even_or_one.sum::<i64>());
}https://stackoverflow.com/questions/73098529
复制相似问题