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
相关产品推荐
相关产品推荐

