2016-06-20 2 views
2
におけるインデックスでArrayBufferの値

私が最初に出現を省略し、配列に2つの文字列を追加する必要があります。設定Scalaの

val strings = ArrayBuffer[String]() 

    strings(1) = "abc1" 
    strings(2) = "abc2" 

しかし、私はこの問題を解決する方法

Exception in thread "main" java.lang.IndexOutOfBoundsException: 1 

を取得していますか?インデックスiArrayBufferが空の場合、有効なインデックスではありません - あなたは新しいStringにインデックスiの要素を設定することはできませんのでごArrayBuffer

+0

[Scalaでデータ構造を初期化]の可能な重複を(http://stackoverflow.com/questions/37919895/initialize-data-structure-in-scala) –

+0

このとして多かれ少なかれ同じ問題です[あなたの前の質問](http://stackoverflow.com/questions/37919895/initialize-data-structure-in-scala)。まず、特定のインデックスの要素を変更する前に、要素を 'ArrayBuffer'に追加する必要があります。 – Jesper

+0

しかし、私はインデックスを設定する必要があるので、 '+ ='の要素を追加することはできません – ps0604

答えて

2

は、空です。

val strings = ArrayBuffer[String]() 

strings += "abc1" 
strings += "abc2" 

を今ArrayBufferは、2つの要素を持って、あなたがしたい場合は、あなたがそれらを変更することができます:最初の要素は、それらを追加することにより、ArrayBufferに存在することを確認してください。あなたは事前に記入したい場合はインデックスがない1.

strings(0) = "something else" 
strings(1) = "hello world" 

で、0から始まることに注意してくださいArrayBuffer私はあなたの前の質問に私の答えでお見せしたようあなたは、たとえば、fill使用することができます。

// Fill with 10 empty strings (creates 10 elements in the ArrayBuffer) 
val strings = ArrayBuffer.fill(10) { "" } 

// Now you can set them (valid indices are 0...9) 
strings(0) = "abc1" 
strings(1) = "abc2" 

はまた、代わりにあなたのマップのキーは数字で、値が文字列である ArrayBufferMapを使用しています。

import scala.collection.mutable.Map 

val strings: Map[Int, String] = Map() 

strings(1) = "abc1" 
strings(2) = "abc2" 
+0

インデックスで出現を設定する方法はありませんか? – ps0604

+0

@ ps0604どういう意味ですか? 'ArrayBuffer'を使うと、指定されたインデックスの要素は、それを変更する前に存在しなければなりません。私の代わりの解を 'Map'で見てください。 – Jesper

関連する問題