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

Scala数组更新任务:基于label索引的元素修改需求

Scala数组更新逻辑实现

先把咱们要实现的规则再明确一遍,避免歧义:

  • 当传入单个label索引时:将该索引位置的元素值加1,同时从该索引的下一个位置开始,数组中所有后续元素的值都加1;
  • 当传入多个label索引时:仅以最后一个label索引为准,执行和单个label相同的操作——即把该位置的元素加1,之后所有后续元素也加1;
    (注:这里默认数组索引是0-based,也就是第一个元素索引为0,如果你的需求是1-based,只需要在代码里做个简单转换就行)

接下来直接上实现代码,我会逐行解释逻辑:

def updateArray(arr: Array[Int], labels: Int*): Array[Int] = {
  // 处理空label的情况(如果不需要可以去掉这行)
  if (labels.isEmpty) return arr.clone()

  // 取最后一个label索引,确保索引在数组合法范围内
  val lastLabel = labels.last
  require(lastLabel >= 0 && lastLabel < arr.length, s"Label index $lastLabel is out of bounds for array of length ${arr.length}")

  // 先复制原数组,避免修改原数组(如果允许修改原数组可以去掉clone)
  val updatedArr = arr.clone()

  // 第一步:更新最后一个label位置的元素
  updatedArr(lastLabel) += 1

  // 第二步:从label的下一个位置开始,所有元素加1
  for (i <- lastLabel + 1 until updatedArr.length) {
    updatedArr(i) += 1
  }

  updatedArr
}

代码解释

  1. 参数定义:arr是待更新的数组,labels: Int*是可变参数,支持传入单个或多个索引值;
  2. 空label处理:如果没有传入任何label,直接返回原数组的副本(避免原数组被意外修改);
  3. 索引合法性校验:用require确保最后一个label索引在数组的有效范围内,避免数组越界异常;
  4. 数组复制:使用clone()创建原数组的副本,这样不会修改原数组的内容(如果业务允许直接修改原数组,可以去掉这一步,直接操作原数组);
  5. 元素更新:先把最后一个label位置的元素加1,然后遍历从该位置下一个索引到数组末尾的所有元素,逐个加1;

测试示例

咱们用你提到的例子来测试:
假设原数组是Array(1,2,3,4,5,6,7),labels是2,4(最后一个label是索引4,对应原数组的第五个元素5):

val originalArr = Array(1,2,3,4,5,6,7)
val result = updateArray(originalArr, 2,4)
// 输出结果:Array(1,2,3,4,6,7,8)

完全符合你描述的预期:第五个元素5变为6,第六个及之后的元素(6、7)都加1变成7、8。

如果是单个label的情况,比如label是3(对应原数组第四个元素4):

val resultSingle = updateArray(originalArr, 3)
// 输出结果:Array(1,2,3,5,6,7,8)

第四个元素4变为5,后面的5、6、7都加1变成6、7、8。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:02:34