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

Scala中如何将Array[Seq[(Int, String)]]转换为Seq[(Int, String)]

Scala 嵌套集合扁平化合并实现方法

需求场景

将Array[Seq[(Int, String)]]类型的嵌套集合,合并为包含所有子Seq中(Int, String)元素的完整单层Seq[(Int, String)],对应示例如下:

  • 待处理输入:
import scala.collection.mutable.ArrayBuffer
// 输入结构
val nestedArr = Array(
  ArrayBuffer((1,"a"), (1,"group"), (1,"of")),
  ArrayBuffer((2,"following"), (2,"clues")),
  ArrayBuffer((3,"three"), (3,"girls"))
)
  • 期望输出:
Seq((1,"a"), (1,"group"), (1,"of"), (2,"following"), (2,"clues"), (3,"three"), (3,"girls"))

最简实现

直接调用Scala集合自带的flatten方法即可完成扁平化,一行代码就能实现需求:

val res: Seq[(Int, String)] = nestedArr.flatten

等价写法

如果需要在合并的同时做元素转换,或者想要更明确的书写逻辑,可以使用flatMap实现,和flatten效果完全等价:

// 写法1:传入identity函数直接返回每个子集合
val res2: Seq[(Int, String)] = nestedArr.flatMap(identity)

// 写法2:显式返回子Seq,后续如果要加过滤、转换逻辑可以直接在内部修改
val res3: Seq[(Int, String)] = nestedArr.flatMap(subSeq => subSeq)

类型适配说明

flatten默认返回的集合类型和外层数组的元素类型兼容,如果需要指定返回为不可变List、Vector等具体Seq子类,直接在结果后调用对应转换方法即可:

// 转换为不可变List
val listRes: List[(Int, String)] = nestedArr.flatten.toList

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:06:29