У меня есть 3 ListBuffers одинаковой длины.

devicenamelist: ListBuffer [Строка]

список дат: ListBuffer [String]

wordcountssortedlistbuf [(String; Int)]

Теперь мне нужно преобразовать их в формат

ListBuffer (Строка, Строка, Строка, Интервал)

Я пытался сделать следующее

 var sortedrecords=scala.collection.mutable.ListBuffer[(String,String,String,Int)]()

 for(i <- 0 to devicenamelist.length)
{

sortedrecords+=(devicenamelist(i),datelist(i),wordcountssortedlistbuf(i)._1,wordcountssortedlistbuf(i)._2)  

}

Это дает мне ошибку следующим образом

[ошибка] найдена строка

Обязательный (String, String, String, Int)

Как операция добавления списка вверху дает только одну строку, когда я намеревался создать (String, String, String, Int). Я что-то упускаю?

Благодарность

0
sdinesh94 19 Дек 2016 в 01:40

1 ответ

Лучший ответ

Вам не хватает скобок в строке +=, но, пожалуйста, не делайте этого, мне больно видеть, как кто-то пишет что-то подобное в scala.

Попробуйте вместо этого что-нибудь вроде этого:

val sortedrecords = devicenamelist.zip(datelist).zip(wordcountssortedlistbuf)
 .map { case ((devicename, date), (word, count)) => 
   (devicename, date, word, count)
 }
5
Dima 19 Дек 2016 в 02:56
Это не операторы кортежей, которые в большей степени режут мне глаза в коде OP, а изменяемый буфер, заполняемый императивным циклом. Но операторы кортежей, чрезмерно конкретная типизация и индексированный доступ к спискам тоже не помогают ...
 – 
Dima
19 Дек 2016 в 17:41