此描述的問題很好:如何替換列表中的給定項目?
scala> var l2 = List(1,2,3)
l2: List[Int] = List(1, 2, 3)
scala> l2(2) = 55
<console>:10: error: value update is not a member of List[Int]
l2(2) = 55
^
此描述的問題很好:如何替換列表中的給定項目?
scala> var l2 = List(1,2,3)
l2: List[Int] = List(1, 2, 3)
scala> l2(2) = 55
<console>:10: error: value update is not a member of List[Int]
l2(2) = 55
^
scala.List
是不可變,這意味着您無法將其更新到位。如果你想創建列表的副本其中包含更新的映射,您可以執行以下操作:
val updated = l2.updated(2, 55)
有可變的有序序列類型以及在scala.collection.mutable
,如Buffer
類型這似乎更就像你想要的一樣。如果您嘗試以下,你應該有更多的成功:
scala> import scala.collection._
import scala.collection._
scala> val b = mutable.Buffer(1,2,3)
b: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3)
scala> b(2) = 55
scala> b
res1: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 55)
編輯:只是要注意一些其他的答案也提到,你應該使用一個「可變列表類型」 - 這是真的,但在斯卡拉「清單」只是指單鏈表,而在Java中它通常用於任何有序的隨機訪問集合。還有一個DoubleLinkedList
,它更像是一個Java LinkedList
,和一個MutableList
,這是一種用於其他類型的內部的類型。
一般來說,你可能需要在斯卡拉是一個Buffer
這項工作;尤其是因爲默認實現是ArrayBuffer
,這與Java中的大多數人的默認值相差無幾,幾乎與ArrayList
相同。
如果你想知道Java集合接口到Scala世界最近的「映射」是什麼,最簡單的做法可能就是檢查JavaConversions的功能。在這種情況下,你可以看到映射是Buffer
:
scala.collection.mutable.Buffer <=> java.util.List
你的問題是,在斯卡拉列表是不可改變的,你需要使用一個可變的列表,而不是。 導入scala.collection.mutable.Queue並使用它。隊列是一個MutableList,所以它應該做你想要的。
不必使用可變的結構,如由Calum注意到上述情況,更新方法返回與給定元素列表的拷貝替換 – 2017-02-23 20:48:29
您正在創建的列表是不可變的。
scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)
scala> l.getClass
res3: java.lang.Class[_] = class scala.collection.immutable.$colon$colon
改爲使用可變列表,你應該沒問題。
由於到這兩個,但不會因爲我正在使用具有不可變列表的現有API。我想我需要替換整個列表來重建它。 – Ska 2011-02-23 17:25:44
但是你可以用分配以含蓄的,如果你不喜歡updated
implicit class RichList[A](l: List[A]) {
def update(which: Int, what: A): List[A] = {
l.updated(which, what)
}
}
val l = List(1, 2, 3)
val l2 = l(2) = 3
List(1, 3, 3)
列表是在Scala中不可改變的。但是,如果你要替換一個列表,你可以使用元素「更新」的方法是這樣
val num:List[Int]=List(1,5,4,7,8,2,10)
num=num.updated(0,22)
由於名單是不可改變的,這將創建一個名爲NUM第一清單副本(因爲我們分配新的列表「NUM」)通過更換第0個元素到22.So的genaral更新方法是
listname.updated(index,value)
雖然我們感謝您的回答,但如果它提供了其他答案之上的附加值,那將會更好。在這種情況下,您的答案不會提供額外的價值,因爲另一個用戶已經發布了該解決方案。如果以前的答案對你有幫助,你應該投票,而不是重複相同的信息。 – 2017-06-20 16:55:05
對不起,這是我在stackoverflow中的第一個答案。我寫了我對「更新」方法的理解,我認爲這對別人是有用的,我沒有任何重複的想法。再次抱歉重複 – 2017-06-21 00:26:27
這樣做,感謝val updated = l2。更新(2,55) – Ska 2011-02-23 17:53:14