首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锈蚀中的mapMulti当量

锈蚀中的mapMulti当量
EN

Stack Overflow用户
提问于 2022-07-24 12:48:15
回答 1查看 36关注 0票数 1

在锈病中有类似于mapMulti的东西吗?

我有以下人为的例子:

代码语言:javascript
复制
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);
}

产出:

代码语言:javascript
复制
sum: 7

操场链接

我宁愿写这样的东西,而不是更简洁的:

代码语言:javascript
复制
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);
}

这有可能在锈病中使用标准库吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-24 16:45:06

为了直接回答您的问题,filter_map完全按照您的要求执行(返回Some(x)而不是(true, x)None而不是(false, x) )。但是,我会更简洁地编写您的代码:

代码语言:javascript
复制
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>());
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73098529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档