You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中对任意大小Vec<u32>所有元素执行按位运算的惯用实现方式

Rust中对任意大小Vec所有元素执行按位运算的惯用实现方式

在Rust里,处理这类对集合所有元素做累积运算的场景,最地道的方式就是利用迭代器的fold方法——它能优雅替代手动循环,完全贴合Rust的惯用风格,代码简洁还易读。

不同的按位运算需要搭配对应的初始值(也就是该运算的单位元),下面分场景给你具体示例:

  • 按位与(AND):按位与的单位元是全1的u32(u32::MAX),因为任何数和全1按位与都等于自身。用fold累积的代码如下:

    fn bitwise_and(vec: &Vec<u32>) -> u32 {
        vec.iter().fold(u32::MAX, |acc, &num| acc & num)
    }
    
  • 按位或(OR):按位或的单位元是0,任何数和0按位或都等于自身。实现代码:

    fn bitwise_or(vec: &Vec<u32>) -> u32 {
        vec.iter().fold(0, |acc, &num| acc | num)
    }
    
  • 按位异或(XOR):异或的单位元同样是0,一个数异或0等于自身,异或自身等于0。实现代码:

    fn bitwise_xor(vec: &Vec<u32>) -> u32 {
        vec.iter().fold(0, |acc, &num| acc ^ num)
    }
    

另外要注意空Vec的情况:按照上面的实现,空集合的运算结果会返回对应的单位元——比如空Vec的按位与返回u32::MAX,按位或和异或返回0,这符合数学上的累积运算定义,是合理的行为。

这种方式还有个额外好处:能无缝结合迭代器的其他适配器,比如你想先过滤掉某些元素再做运算,只需在fold前加对应的处理就行。比如只对奇数做按位或:

fn bitwise_or_odds(vec: &Vec<u32>) -> u32 {
    vec.iter()
        .filter(|&&num| num % 2 != 0)
        .fold(0, |acc, &num| acc | num)
}

备注:内容来源于stack exchange,提问作者Dávid Tóth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:40:30