我对Scala非常陌生,但我想知道是否有人能帮助我。
我有以下格式的数据集:Map[String, List[(Int, String, Float)]]
数据样本:
教育路线(GU),1:草莓大学:0.65f,2:甘蓝市学院-河滨夏令营:1.4F,3:Sims学校:3.9f,4:科学中心:0.7F,5:葡萄大学:2.4f,6:蘑菇图书馆:1.9f,7:水果学院:0.9F,8:皇家蜜瓜养护学院:0.75f,GU:0.6f
我正试图得到所有路线的平均总距离和平均阶段数-我从先前的一次节目单中得到以下信息:
def average(ls:List[Int]):Float = {
sum(ls)/length(ls)
}
println(average(list1))我理解这是一个更简单的例子,但任何帮助都将不胜感激。我也曾想过,怎样把价值加起来,然后除以路线数目呢?
发布于 2020-04-15 22:34:14
如果您只想编写一个普通的方法,这可以通过一个迭代来完成。
更新:
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样本是这里
https://stackoverflow.com/questions/61239283
复制相似问题