Как обработать список в scala и добавить элементы к нему - PullRequest
0 голосов
/ 03 марта 2020

Я довольно новичок в scala, любая помощь будет оценена

Допустим, например, я вычисляю точки [Lat, long] в a для l oop, как их добавить в изменяемом списке итеративно

например:


var points = MutableList(List(Double,Double))

for( i <- 0 to 100 ){
var (lat,long) = customfunction() // lat and long returned are in double datatype
points+=List(lat,lon)

} 

с ошибкой : команда-3921379637506779: 74: ошибка: несоответствие типов; найдено: lat.type (с базовым типом Double) обязательно: ничего не указывается + = список (широта, долгота) ^ command-3921379637506779: 74: ошибка: несоответствие типов; найдено: lon.type (с базовым типом Double) обязательно: ничего не указано + = список (широта, долгота)

Правильно ли я использую изменяемый список или какой-либо другой доступный подход, пожалуйста, дайте мне знать

Ответы [ 4 ]

1 голос
/ 03 марта 2020

Лучше было бы использовать классы дел, как показано ниже:

case class LatLong(lat: Double, long: Double)

var points: MutableList[LatLong] = MutableList()

def customfunction(): LatLong = {
    LatLong(1.0, 1.0)
}

for (i <- 0 to 5) {
    var currLatLong = customfunction() // lat and long returned are in double datatype
    points += currLatLong
 }

println(points)

Функциональный подход

case class LatLong(lat: Double, long: Double)

def customfunction(): LatLong = {
    LatLong(1.0, 1.0)
}

// No mutable points list is required.
val points = (0 to 5).map(e => customfunction()).toList

println(points)

// Output
//List(LatLong(1.0,1.0), LatLong(1.0,1.0), LatLong(1.0,1.0), LatLong(1.0,1.0), LatLong(1.0,1.0), LatLong(1.0,1.0))

Дайте мне знать, если это поможет! !

1 голос
/ 03 марта 2020

Попробуйте следующий код:

var points = new mutable.MutableList[List[Double]]

  for (i <- 0 to 5) {
    var (lat, long) = customfunction() // lat and long returned are in double datatype
    points += List(lat, long)
  }

 println(points)

  def customfunction(): (Double, Double) = {
    return (1.0, 1.0)
  }
1 голос
/ 03 марта 2020

Довольно сложно определить, чего вы на самом деле пытаетесь достичь sh. customfunction() возвращает кортеж, (Double,Double) или список, List[Double]?

Что бы он ни возвращал, если вы хотите List из 100 таких элементов, попробуйте это.

val points = List.fill(100)(customfunction())

Как правило, избегайте мутаций. Нет var с и несколько, если таковые имеются, изменяемых коллекций.

0 голосов
/ 03 марта 2020
import scala.collection.mutable.ListBuffer

val points = new ListBuffer[List[(Double, Double)]]()

for( i <- 0 to 100 ) {
  var result: (Double, Double) = customfunction()
  points += List(result)
}
...