Scala列表添加元素问题:如何为元素追加末尾两数之和
解决Scala列表元素追加数值和的问题
我来帮你排查下代码的问题,然后给出符合需求的实现方案~
首先看你写的函数,有两个关键问题导致它无法正常工作:
- 当你对分割后的数组
d直接做字符串拼接时,Scala会调用数组的toString方法,得到的是类似[Ljava.lang.String;@xxxxxx的对象引用字符串,而不是原有的元素内容; d(2)和d(3)是字符串类型,直接用+运算符会做字符串拼接(比如"1"+"0"得到"10"),而不是你需要的数值相加。
正确的实现方案
我们可以分步骤处理每个列表元素:
- 把每个字符串按逗号分割成数组;
- 取出数组中最后两个数值元素,转换为整数后求和;
- 将原字符串和求和结果拼接成新的字符串;
- 最终收集所有处理后的字符串为新列表。
对应的Scala代码如下:
def addSum(listin: List[String]): List[String] = { listin.map { originalStr => // 按逗号分割字符串为数组 val parts = originalStr.split(",") // 提取最后两个数值部分,转Int后求和 val num1 = parts(2).toInt val num2 = parts(3).toInt val sum = num1 + num2 // 拼接原字符串和求和结果 s"$originalStr,$sum" } }
测试验证
用你的输入列表测试:
val listA = List("banana,africa,1,0", "apple,europe,1,2", "peas,africa,1,4") val listB = addSum(listA) // 输出结果:List("banana,africa,1,0,1", "apple,europe,1,2,3", "peas,africa,1,4,5")
完全符合你的期望输出。
额外提示(可选)
如果你的输入列表可能存在格式不规范的元素(比如最后两个部分不是整数),可以用toIntOption来避免抛出异常,示例如下:
def addSumSafe(listin: List[String]): List[String] = { listin.map { originalStr => val parts = originalStr.split(",") val sumOpt = for { num1Str <- parts.lift(2) num1 <- num1Str.toIntOption num2Str <- parts.lift(3) num2 <- num2Str.toIntOption } yield num1 + num2 // 如果求和成功就追加,否则返回原字符串 sumOpt.fold(originalStr)(sum => s"$originalStr,$sum") } }
这个版本会处理格式错误的情况,不会崩溃。
内容的提问来源于stack exchange,提问作者user9793373
相关产品推荐
相关产品推荐

