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

如何用Seq[String]过滤Scala的Seq[(String, String)]并提取对应值

Scala 根据指定序列提取对应元组值的实现方法

这里提供两种常用的实现方式,可根据数据规模和需求选择:

方法1:转换为Map后提取(推荐,高效)

先把元组序列转换成Map[String, String],利用Map的O(1)查找特性,遍历seqA直接提取对应值,这种方式时间复杂度最优,适合大数据量场景:

val tupleSeq: Seq[(String, String)] = Seq(
  ("aaa", "A_A_A"),
  ("bbb", "B_B_B"),
  ("ccc", "C_C_C")
)

val seqA: Seq[String] = Seq("aaa", "bbb")

// 将元组序列转为Map,键为元组第一个元素,值为第二个元素
val tupleMap = tupleSeq.toMap
// 遍历seqA,从Map中取出对应的值
val seqB = seqA.map(tupleMap(_))

// 输出结果:Seq("A_A_A", "B_B_B")

如果seqA中存在tupleSeq没有的键,可以用getOrElse设置默认值,避免抛出NoSuchElementException:

// 不存在的键默认返回空字符串,可自定义默认值
val seqBWithDefault = seqA.map(key => tupleMap.getOrElse(key, ""))

方法2:过滤+映射(适合小数据量)

通过flatMap结合find,逐个匹配seqA中的元素,找到对应元组后提取值。这种方式无需转换结构,但每次查找都是线性遍历,数据量大时效率较低:

val seqB = seqA.flatMap(targetKey => tupleSeq.find(_._1 == targetKey).map(_._2))

说明

  • 方法1的时间复杂度为O(n + m)(n是tupleSeq长度,m是seqA长度),性能更优;
  • 方法2的时间复杂度为O(n*m),仅推荐在数据量较小时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:12:22