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

Scala统计列表中长度≥2的指定元素连续分组数的实现方法

解决方法

你只需要在折叠分组时额外记录每个连续元素的出现长度,最终统计时过滤掉长度不足2的分组即可,具体实现如下:

实现逻辑

  1. 调整foldLeft的累加器结构,同时存储连续元素的值和对应连续出现的长度
  2. 遍历序列时更新累加器:遇到和上一个相同的元素就累加长度,不同则新增分组记录
  3. 最终统计时仅保留长度≥2的分组,再统计目标元素的分组数量

代码实现

// 遍历序列生成带长度的连续分组,格式为 List[(元素值, 连续长度)]
val consecutiveGroups = daysSequence.foldLeft(List[(Int, Int)]()) { (acc, current) =>
  acc match {
    // 累加器为空,新增第一个分组
    case Nil => List((current, 1))
    // 当前元素和最后一个分组的元素相同,累加长度
    case (lastVal, lastCnt) :: tail if lastVal == current => (lastVal, lastCnt + 1) :: tail
    // 当前元素和最后一个分组的元素不同,新增分组
    case _ => (current, 1) :: acc
  }
}

// 统计长度≥2的1的分组数量
val count1Grp = consecutiveGroups.count { case (value, length) => value == 1 && length >= 2 }
// 统计长度≥2的0的分组数量
val count0Grp = consecutiveGroups.count { case (value, length) => value == 0 && length >= 2 }

结果验证

第一个示例

输入序列的连续分组结果为:(-1, 16)、(1, 4)、(0, 1)、(-1, 9),过滤长度≥2的分组后,仅保留(-1, 16)、(1, 4),最终得到count1Grp=1、count0Grp=0,符合预期。

第二组示例

  • 输入1的分组为(0, 18)、(1, 2)、(0, 10),所有分组长度都≥2,结果为count1Grp=1、count0Grp=2
  • 输入2的分组为(-1, 9)、(1, 1)、(0, 6)、(-1, 1)、(0, 3)、(-1, 9),过滤后仅保留长度≥2的分组,结果为count1Grp=0、count0Grp=2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:15:03