2016-11-03 6 views
0

スカラ配列を作成して1つの要素を追加したが、配列の長さがまだ0で、構築機能でそれを見ることはできますが、追加された要素はありません。Scala Arrayが新しい要素を追加する

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" 

Scalaの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が追加しようとすると、新しいArrayインスタンスが作成され、配列は変更可能です – pamu

関連する問題