Scala - среднее общее расстояние и среднее количество этапов из набора данных карты - PullRequest
0 голосов
/ 16 апреля 2020

Я очень новичок в Scala, но мне было интересно, может ли кто-нибудь мне помочь.

У меня есть следующие данные в этом формате: Map[String, List[(Int, String, Float)]]

Образец данных:

Маршрут образования (GU), 1: Клубничный университет: 0,65f, 2: Колледж City Of Cabbage - Лагерь Риверсайд: 1.4f, 3: Школа симов: 3.9f, 4: Научный центр: 0.7f, 5: Университет винограда: 2.4f, 6: Библиотека грибов: 1.9f, 7: Школа фруктов: 0.9f, 8: Королевская консерватория дынь: 0.75f, 9: GU: 0.6f`

Я пытаюсь получить среднее общее расстояние и среднее количество этапов всех маршрутов - у меня есть следующее из предыдущего упражнения:

def average(ls:List[Int]):Float = {
  sum(ls)/length(ls)
}

println(average(list1))

Я ценю, что это более упрощенно c пример, но любая помощь будет высоко ценится. Я также думал о подходе сложения значений, а затем деления на количество маршрутов?

1 Ответ

0 голосов
/ 16 апреля 2020

Если вы хотите просто написать усредненный метод, это можно сделать за одну итерацию.

ОБНОВЛЕНИЕ:

def average[T](ls: List[T])(implicit num: Numeric[T]): Float = {
  val (sum, length) =
    ls.foldLeft((0.0f, 0))({ case ((s, l), x) => (num.toFloat(x) + s, 1 + l) })
  sum / length
}

val map = Map[String, List[(Int, String, Float)]](
  "Education Route (GU)" -> List(
    (1, "University Of Strawberry", 0.65f),
    (2, "City Of Cabbage College - Riverside Camp", 1.4f),
    (3, "School of Sims", 3.9f),
    (4, "Science Centre", 0.7f),
    (5, "University of Grapes", 2.4f),
    (6, "The Mushroom Library", 1.9f),
    (7, "School Of Fruit", 0.9f),
    (8, "Royal Conservatoire Of Melons", 0.75f),
    (9, "GU", 0.6f)
  )
)

val distances = map.mapValues(_.map(_._3)).getOrElse("Education Route (GU)", List.empty)
val steps = map.mapValues(_.map(_._1)).getOrElse("Education Route (GU)", List.empty)

val averageDistance = average[Float](distances)
val averageSteps = average[Int](steps)
println(s"Average distance: $averageDistance")
println(s"Average steps: $averageSteps")

Scast ie выборка здесь

...