2016-11-03 804 views
0

当我创建了一个Scala数组并添加了一个元素,但数组长度仍然为0,并且我无法获得添加的元素,尽管我可以在构造函数中看到它。可以Scala数组添加新元素

scala> val arr = Array[String]() 
arr: Array[String] = Array() 

scala> arr:+"adf" 
res9: Array[String] = Array(adf) 

scala> println(arr(0)) 
java.lang.ArrayIndexOutOfBoundsException: 0 
    ... 33 elided 
+0

你正在创建一个新的数组用':+'存储在'res9'在你的榜样,因为你没有把它分配到其他地方。您可以在该数组中找到新元素。原始数组没有以任何方式改变。 – alextsc

回答

1

您声明了0大小的数组。它不能有任何元素。你的数组的大小为0. Array[String]()是一个数组构造器语法。

:+使用给定元素创建一个新数组,因此即使在执行:+操作之后,旧数组也是空的。

您必须使用ofDim函数声明特定大小的数组,然后才可以使用arr(index) = value语法将元素放入内部。

声明的数组大小一旦不像列表一样动态增加。尝试附加值会创建新的数组实例。

或者您可以在创建过程中使用Array("apple", "ball")语法来初始化数组。

val size = 1 
val arr = Array.ofDim[String](size) 
arr(0) = "apple" 

斯卡拉REPL

scala> val size = 1 
size: Int = 1 

scala> val arr = Array.ofDim[String](size) 
arr: Array[String] = Array(null) 

scala> arr(0) = "apple" 

scala> arr(0) 
res12: String = apple 
+0

@tkachuko数组大小不会动态增加 – pamu

+1

@tkachuko试图追加会创建新的数组实例,并且数组是可变的 – pamu