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

Scala中如何在可变数组内创建存储键值对的不可变数组

问题1:你提供的写法不可用,有3个错误点

  • 错误1:Scala标准库中不存在immutable.ArrayBuffer类,ArrayBuffer是scala.collection.mutable包专属的可变集合类型,你需要的不可变索引序列可以选用Vector(Scala不可变序列默认实现,性能最优)或scala.collection.immutable.ArraySeq(和数组语义更接近)。
  • 错误2:你定义的array1元素类型是Option[IndexedSeq[(A,B)]],直接赋值序列会触发类型不匹配报错,需要用Some包裹目标序列。
  • 错误3:刚初始化的空ArrayBuffer没有下标为0的元素,直接用array1(0)赋值会抛出数组下标越界异常,新增元素需要用+=方法。

问题2:方括号内需要填写的类型

你的array1要求内部存储的不可变序列元素是(A,B)类型的键值对,所以泛型参数直接填(A,B)即可。

正确实现示例

场景1:向空array1追加长度为10的不可变键值对序列

// 导入依赖包
import scala.collection.mutable
import scala.collection.immutable.Vector

val array1 = mutable.ArrayBuffer[Option[IndexedSeq[(A,B)]]]()
// 生成长度为10的Vector,可按需替换fill的默认值逻辑
array1 += Some(Vector.fill[(A,B)](10)(null))

场景2:修改array1已有的第0位元素

// 先给array1填充占位元素,确保下标0存在
array1 += None
// 后续修改第0位的值
array1(0) = Some(Vector.fill[(A,B)](10)(null))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:24:08