【问题标题】:How to create an immutable array within a mutable array in scala?如何在scala的可变数组中创建不可变数组?
【发布时间】:2021-11-10 14:26:25
【问题描述】:

所以我试图在 scala 的可变数组中创建一个大小为 10 的不可变数组。在这个不可变数组中,我想存储键值对。到目前为止,我有这个可变数组:

val array1 = mutable.ArrayBuffer[Option[IndexedSeq[(A,B)]]]()

现在要在 array1 中创建一个不可变缓冲区,我应该这样做:

array1(0) = immutable.ArrayBuffer[](10)

我对类型的不可变缓冲区括号内的内容感到困惑。

【问题讨论】:

  • 我不明白你到底想做什么?您正在尝试将immutable.ArrayBuffer 分配给array1 的第一个位置,您想要做什么?
  • @LuisMiguelMejíaSuárez 是的,这就是我的目标
  • 好吧,array1mutable.ArrayBuffer[Option[IndexedSeq[(A,B)]]],因此元素必须是 Option[IndexedSeq[(A,B)]] 而不是 immutable.ArrayBuffer,所以你想做的事情没有意义。

标签: arrays scala


【解决方案1】:

没有immutable.ArrayBufferArrayBuffer 是可变的。

Trait IndexedSeq 可以对应不可变和可变集合,因此您可以选择使用什么作为内部元素:

type A = Int
type B = Int

val array1 = mutable.ArrayBuffer[Option[IndexedSeq[(A,B)]]]()

// Adds immutable Vector
array1 += Some(IndexedSeq[(A, B)]( (1,2), (3,4) ))

// Adds mutable ArrayBuffer
array1 += Some(ArrayBuffer[(A, B)]( (1,2), (3,4) ))

注意,由于您的内部元素是Option[IndexedSeq[...]],因此您需要将要添加的元素包装在Some 中。

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2013-04-09
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多