【问题标题】:Scala - average total distance and average number of stages from a map datasetScala - 地图数据集中的平均总距离和平均阶段数
【发布时间】:2020-07-29 01:05:51
【问题描述】:

我对 Scala 很陌生,但我想知道是否有人可以帮助我。

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

数据样本:

教育路线(GU),1:草莓大学:0.65f,2:City Of Cabbage College - Riverside Camp: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))

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

【问题讨论】:

标签: scala function functional-programming average scala-collections


【解决方案1】:

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

更新:

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

【讨论】:

  • 当我尝试运行它时,它会抛出一个“类型不匹配”错误:错误:(100、28)类型不匹配;找到:List[(String, List[(Int, String, Float)])] 需要:List[Int]
  • @uncharted2020 您将错误的数据结构传递给列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多