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

Scala列表添加元素问题:如何为元素追加末尾两数之和

解决Scala列表元素追加数值和的问题

我来帮你排查下代码的问题,然后给出符合需求的实现方案~

首先看你写的函数,有两个关键问题导致它无法正常工作:

  1. 当你对分割后的数组d直接做字符串拼接时,Scala会调用数组的toString方法,得到的是类似[Ljava.lang.String;@xxxxxx的对象引用字符串,而不是原有的元素内容;
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:05:29