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

如何从两个元组序列生成符合条件的Scala元组序列?

解决思路与实现方案

核心思路

要实现按键匹配并根据值的大小筛选,最直接的方式是先将两个序列转换为Map(键值对结构),这样可以快速通过键找到对应的值,避免嵌套遍历序列带来的低效。之后只需处理两个Map共有的键,按照规则筛选出符合条件的键值对即可。

代码实现

val seqA: Seq[(String, Long)] = Seq(("0", 123), ("1", 10))
val seqB: Seq[(String, Long)] = Seq(("0", 50), ("1", 75))

// 将序列转换为Map,方便按键查找
val mapA = seqA.toMap
val mapB = seqB.toMap

// 筛选出两个序列共有的键
val commonKeys = mapA.keySet intersect mapB.keySet

// 按照规则筛选:仅保留seqA值大于seqB值的键值对
val result: Seq[(String, Long)] = commonKeys
  .filter(key => mapA(key) > mapB(key))
  .map(key => (key, mapA(key)))
  .toSeq

// 输出结果:Seq(("0", 123))
println(result)

简化写法(for推导式)

也可以用Scala的for推导式直接完成逻辑,代码更简洁:

val mapB = seqB.toMap
val result: Seq[(String, Long)] = for {
  (key, valueA) <- seqA
  valueB <- mapB.get(key) // 仅处理seqB中存在的键
  if valueA > valueB     // 满足seqA值大于seqB值的条件
} yield (key, valueA)

逻辑说明

  1. 转Map:把seqA和seqB转为Map[String, Long],这样通过键获取值的时间复杂度是O(1)。
  2. 取共同键:只处理两个序列都存在的键,避免无意义的匹配。
  3. 筛选条件:遍历共同键,仅保留seqA中对应值大于seqB的键值对,最终转成目标Seq。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:50:41