此描述的问题很好:如何替换列表中的给定项目?
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