2014-10-27 2 views
3

Я пытаюсь создать список слов в Scala. Я новичок в языке. Я прочитал много сообщений о том, как вы не можете редактировать неизменяемые объекты, но ни один из них не смог показать мне, как создать список, который мне нужен в Scala. Я использую var для инициализации, но это не помогает.Добавить элемент в Seq [String] в Scala

var wordList = Seq.empty[String] 

for (x <- docSample.tokens) { 
    wordList.++(x.word) 
} 

println(wordList.isEmpty) 

Я бы очень признателен за помощь в этом. Я понимаю, что объекты неизменяемы в Scala (хотя у вас нет варов), но мне нужна краткая информация о том, почему выше всегда печатает «true», и как я могу сделать список, добавляя слова, содержащиеся в docSample.tokens.word ,

+4

Похоже, вы хотите что-то вроде 'val wordList = docSample.tokens.map (_. Word)' Нет переменных переменных. Или 'flatMap', если' word' оказывается другим 'Seq' .. это непонятно из вашего сообщения. –

ответ

-1

Через несколько часов я отправил вопрос, и через минуту выяснил это.

словник = (x.word) :: WordList

Этот код решает эту проблему для тех, кто попадается с той же проблемой.

+0

Здесь нет необходимости использовать изменяемый 'var' wordList. –

5

Вы можете добавить к неизменному Seq и переназначить var на результат, написав

wordList :+= x.word 

Это выражение desugars к wordList = wordList :+ word таким же образом, что x += 1 desugars к x = x + 1.

8

Вы можете использовать Вэл и по-прежнему держать список слов неизменны, как это:

val wordList: Seq[String] = 
    for { 
    x <- docSample.tokens  
    } yield x.word 

println(wordList.isEmpty) 

В качестве альтернативы:

val wordList: Seq[String] = docSample.tokens.map(x => x.word)  

println(wordList.isEmpty) 

Или даже:

val wordList: Seq[String] = docSample.tokens map (_.word)  

println(wordList.isEmpty) 
0

Это будет работать:

wordList = wordList:+(x.word) 
Смежные вопросы