打破for循环scala?

时间:2015-02-18 20:55:10

标签: scala

我需要退出scala中的for循环,但是当我尝试将i的值更改超过其限制时,我的IDE会说ival所以我无法改变它。我该如何解决这个问题?

另外,如果ival,我是否可以将其用作列表索引,因为它始终是相同的值?

我正在尝试通过列表,如果列表包含一个键(这是一个字符串),我将其从列表中删除。但是如果它有多个这个字符串的实例我只想删除一个,所以我想在找到密钥的第一个实例后退出for循环。

 for (i <- 0 to d.length-1){
   if (key == d(i)){
     d=d.patch(i,Nil,1)
     i=d.length

   }      

1 个答案:

答案 0 :(得分:1)

在scala中,声明为val的变量是不可变的 - 它永远不会被更改。在for循环的每次迭代中,索引变量i同样是不可变的。习惯性scala严重依赖于这种不可变性的范例。收藏集通常也会声明为val,然后在执行mapflatMapfilter或其他操作时重新分配给新变量。

对于您的示例,您可能会执行以下操作:

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类似的问题中。