代码之家  ›  专栏  ›  技术社区  ›  evildead

scala动态多维可变数组,如数据结构

  •  8
  • evildead  · 技术社区  · 15 年前

    有这么多不同的类型,也许我只是没有找到合适的。所以请把我推到正确的方向。

    3 回复  |  直到 13 年前
        1
  •  8
  •   Rex Kerr    15 年前

    如果你想做这样的事

    ArrayBuffer .

    scala> import scala.collection.mutable.ArrayBuffer
    import scala.collection.mutable.ArrayBuffer
    
    scala> val a = ArrayBuffer.fill(3,3)(0)
    a: scala.collection.mutable.ArrayBuffer[scala.collection.mutable.ArrayBuffer[Int]] = ArrayBuffer(ArrayBuffer(0, 0, 0), ArrayBuffer(0, 0, 0), ArrayBuffer(0, 0, 0))
    
    scala> a(2)(1) = 4
    
    scala> a(0) = ArrayBuffer(1,2,3)
    
    scala> a
    res2: scala.collection.mutable.ArrayBuffer[scala.collection.mutable.ArrayBuffer[Int]] = ArrayBuffer(ArrayBuffer(1, 2, 3), ArrayBuffer(0, 0, 0), ArrayBuffer(0, 4, 0))
    

    请注意 fill 允许您自动创建和初始化最多5D结构。还要注意的是,您可以扩展这些结构的长度,但它不会扩展整个多维结构,只扩展您添加到的多维结构。比如说,

    scala> a(2) += 7 // Add one element to the end of the array
    res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0, 4, 0, 7)
    
    scala> a
    res4: scala.collection.mutable.ArrayBuffer[scala.collection.mutable.ArrayBuffer[Int]]
    = ArrayBuffer(ArrayBuffer(1, 2, 3), ArrayBuffer(0, 0, 0), ArrayBuffer(0, 4, 0, 7))
    
        2
  •  4
  •   Daniel C. Sobral    15 年前

    嗯,这在很大程度上取决于你打算用它做什么,但你最好的猜测是 IndexedSeq[IndexedSeq[T]] (或更深的嵌套),使用 Vector 作为 IndexedSeq (无论如何,这是默认的实现)。

    例如:

    scala>索引eq(索引eq(1、2、3)、索引eq(4、5)、索引eq(6、7、8、9))

        3
  •  3
  •   user unknown    15 年前

    val aa : Array[Array[Int]] = Array.ofDim (3, 4)
    

    嗯,是的,我知道了,尺寸是固定的。怎么样:

    val i = random.nextInt (5) + 1
    val j = new GregorianCalendar (). get (Calendar.DAY_OF_WEEK)
    val aa : Array[Array[Int]] = Array.ofDim (i, j)
    

    val aa : Array [Int] = Array.ofDim (2)
    

    val aaa = Array.fill (3) (aa)         
    

    aaa:Array[Array[Int]]=数组(Array(0,0),Array(0,0),Array(0,0))

    推荐文章