我需要退出scala中的for循环,但是当我尝试将i
的值更改超过其限制时,我的IDE会说i
是val
所以我无法改变它。我该如何解决这个问题?
另外,如果i
是val
,我是否可以将其用作列表索引,因为它始终是相同的值?
我正在尝试通过列表,如果列表包含一个键(这是一个字符串),我将其从列表中删除。但是如果它有多个这个字符串的实例我只想删除一个,所以我想在找到密钥的第一个实例后退出for循环。
for (i <- 0 to d.length-1){
if (key == d(i)){
d=d.patch(i,Nil,1)
i=d.length
}
答案 0 :(得分:1)
在scala中,声明为val
的变量是不可变的 - 它永远不会被更改。在for
循环的每次迭代中,索引变量i
同样是不可变的。习惯性scala严重依赖于这种不可变性的范例。收藏集通常也会声明为val
,然后在执行map
,flatMap
,filter
或其他操作时重新分配给新变量。
对于您的示例,您可能会执行以下操作:
val data = Seq("foo", "bar", "bar", "bar", "baz", "qux")
val newData = data diff Seq("bar")
或者:
val (first, second) = data.splitAt(data.indexOf("bar"))
val newData = first ++ second.tail
现在newData
将丢失&#34; bar&#34;的1个实例。还有很多其他方法可以做到这一点,其中许多方法记录在this类似的问题中。