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

如何在稳定版Rust中迭代切片的相等元素连续子序列?

在Rust稳定版中实现连续相等元素的切片分组

使用第三方库

可以直接使用slice_group_by crate,它专门提供了稳定版的切片分组功能,完全匹配你的需求。

添加依赖到Cargo.toml:

[dependencies]
slice_group_by = "0.3"

使用示例:

use slice_group_by::GroupBy;

fn main() {
    let data = [1,1,1,2,2,3,4,5,5,5,5,6];
    let groups = data.group_by(|a, b| a == b);
    
    for group in groups {
        println!("{group:?}");
    }
}

运行后会输出你期望的各个子切片:[1, 1, 1]、[2, 2]、[3]、[4]、[5, 5, 5, 5]、[6]。

手动实现(基于标准库)

如果不想引入第三方依赖,可通过标准库API手动实现该逻辑,核心思路是跟踪当前分组的起始索引,遍历切片找到连续相等元素的结束位置,生成对应子切片:

fn group_equal_elements<T: PartialEq>(slice: &[T]) -> impl Iterator<Item = &[T]> {
    let mut start = 0;
    std::iter::from_fn(move || {
        if start >= slice.len() {
            return None;
        }
        let current = &slice[start];
        // 找到第一个不等于当前元素的位置,确定分组结束索引
        let end = slice[start..]
            .iter()
            .position(|elem| elem != current)
            .map_or(slice.len(), |pos| start + pos);
        let group = &slice[start..end];
        start = end;
        Some(group)
    })
}

fn main() {
    let data = [1,1,1,2,2,3,4,5,5,5,5,6];
    for group in group_equal_elements(&data) {
        println!("{group:?}");
    }
}

内容的提问来源于stack exchange,提问作者RBF06

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:45:13