Scala二维列表处理实现:按列拼接为|分隔的指定格式输出
Scala二维列表按列提取拼接实现方案
核心逻辑是先对存储了多维度属性的二维列表做转置,将原本按「属性类型分行存储」的结构,转换为「单条人员信息分行存储」的结构,再对每行元素用|分隔拼接即可。
标准实现(使用Scala内置API)
Scala标准库的List已经提供了transpose方法直接完成矩阵转置操作,配合mkString就能快速实现需求:
// 输入数据,注意Scala中字符串需使用双引号包裹 val source = List( List("John", "Will", "Steven"), List(25, 28, 34), List("M", "M", "M") ) // 转置后逐行用|拼接 val res = source.transpose.map(_.mkString("|")) // 逐行打印即可得到目标输出 res.foreach(println)
运行后输出完全匹配要求:
John|25|M Will|28|M Steven|34|M
注意事项
- 使用
transpose要求所有子列表长度一致,否则会抛出运行时异常,生产环境使用前建议先校验所有子列表长度相等 mkString(分隔符)是Scala集合提供的通用拼接方法,会自动把集合内元素按指定分隔符拼接为字符串,无需手动遍历拼接
手动实现转置(不依赖内置API)
如果需要自定义转置逻辑(比如兼容子列表长度不一致的场景),可以参考如下实现:
def customTranspose[T](data: List[List[T]]): List[List[T]] = { val columnCount = data.headOption.map(_.length).getOrElse(0) (0 until columnCount).map(col => data.map(row => row(col))).toList } // 调用方式和内置API一致 val customRes = customTranspose(source).map(_.mkString("|"))
内容的提问来源于stack exchange,提问作者Ankit Gupta
相关产品推荐
相关产品推荐

