2016-06-20 156 views
2

我需要添加到陣列中兩個字符串設定在ArrayBuffer值,省略第一次出現:通過指數斯卡拉

val strings = ArrayBuffer[String]() 

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

但是我卻越來越

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

如何解決這一問題?

+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

ArrayBuffer是空的,所以你不能在索引i元素設置爲新String - 指數i是不是一個有效的索引,如果ArrayBuffer是空的。首先要確保的元素在ArrayBuffer存在,加入他們:

val strings = ArrayBuffer[String]() 

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

現在ArrayBuffer有兩個要素,如果你願意,你可以對其進行修改。請注意,編號從0開始,而不是在1

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

如果你想預填的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" 

或者,使用Map代替ArrayBuffer,在地圖的鍵數和值都是字符串。

import scala.collection.mutable.Map 

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

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

沒有辦法按索引設置事件? – ps0604

+0

@ ps0604你是什麼意思?如果使用'ArrayBuffer',那麼在修改它之前,指定索引處的元素必須存在。另請參閱我的替代解決方案與「地圖」。 – Jesper