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

Scala如何从集合中提取指定类型元素并计算交集?

Scala 两个Set求交集的简洁高效实现

需求说明

你需要从存储(Long, Double)元组的firstSet中提取所有Long值,和Set[Long]类型的secondSet求交集,不需要编写嵌套条件语句就能实现。

基础简洁实现

直接通过map算子提取元组的第一个Long元素,再调用Scala Set内置的intersect方法即可:

val intersectResult: Set[Long] = firstSet.map(_._1).intersect(secondSet)

其中_._1是Scala访问元组第一个元素的语法糖,等价于完整写法tuple => tuple._1。

大集合场景优化实现

如果两个集合体量差异较大(比如secondSet远小于firstSet),可以直接过滤firstSet中的元素,省去生成全量Long中间集合的开销,性能更高:

val optimizedResult: Set[Long] = firstSet.collect {
  case (longVal, _) if secondSet.contains(longVal) => longVal
}

两种方案的适用场景

  • 基础实现逻辑简单易读,时间复杂度为O(n + min(n,m)),n为firstSet大小,m为secondSet大小,适合两个集合体量接近的场景
  • 优化实现仅需要遍历一次firstSet,contains操作是Set的O(1)哈希查找,时间复杂度为O(n),适合firstSet体量远大于secondSet的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:00