2015-02-18 2 views
-1

Мне нужно выйти из цикла for в scala, но когда я попытаюсь изменить значение i за свой лимит, моя IDE говорит, что i - это , поэтому я не могу его изменить. Как мне обойти это?Вырыв из шлема для петли?

Кроме того, если i является val, могу ли я не использовать его в качестве индекса списков, потому что он всегда будет того же значения?

Я пытаюсь пройти список, и если в списке содержится ключ (который является строкой), я удаляю его из списка. Однако, если у него есть несколько экземпляров этой строки, я хочу только удалить ее, поэтому я хочу выйти из цикла for после того, как найду первый экземпляр ключа.

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

    }  
+1

Что вы пытаетесь сделать с этим? Объяснение немного больше о том, что должен делать этот код, поможет его реорганизовать. –

+1

Это то, что вы пытаетесь сделать? http://stackoverflow.com/questions/5636717/what-is-an-idiomatic-scala-way-to-remove-one-element-from-an-immutable-list –

ответ

1

В Скале, переменная объявлена ​​как 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 потеряет 1 экземпляр "бара". Есть много других способов сделать это, многие из которых задокументированы в this подобный вопрос.

Смежные вопросы