Scala - 地图数据集的平均总距离和平均阶段数

Scala - average total distance and average number of stages from a map dataset

我是 Scala 的新手,但我想知道是否有人可以帮助我。

我有以下格式的数据集:Map[String, List[(Int, String, Float)]]

数据样本:

Education Route (GU),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`

我正在尝试获取所有路线的平均总距离和平均阶段数 - 我从之前的练习中得到以下信息:

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

println(average(list1))

我很欣赏这是一个更简单的示例,但我们将不胜感激。我也确实考虑过将值相加然后除以路由数的方法?

如果你只想写一个平均方法,这可以通过一次迭代来完成。

更新:

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")

Scastie 样本是 here