如何求和列表中的 Ints 数和 Floats 数 - Scala
How to sum number of Ints and Number of Floats within a List - Scala
我需要计算 Map 中整数和浮点数的数量,类似于 Map[String, List[(Int, String, Float)]]
数据来自读取文件 - 例如里面的数据看起来有点像(但是还有一些路由):
Cycle Route (City),1:City Centre :0.75f,2:Main Park :3.8f,3:Central Station:2.7f,4:Modern Art Museum,5:Garden Centre:2.4f,6:Music Centre:3.4f
地图被拆分,字符串是路线名称,列表是其余数据。
我希望它计算每条路线的 'checkpoints' 数量和每条路线的总距离(即浮点数)然后打印出来,例如Oor Wullie Route有6个检查站,总距离18.45km
我想我需要使用 foldLeft
但是我不确定该怎么做?
我以前做过但不确定如何将其应用于上述情况的简单折叠示例?
val list1 = List.range(1,20)
def sum(ls:List[Int]):Int = {
ls.foldLeft(0) { _ + _}
}
你可以弃牌,但我认为这是不必要的。
只需计算列表的大小即可知道检查点的数量(假设列表中的每个条目都是一个检查点)。
要计算总距离,您可以这样做:
def getDistance(list: List[(Int, String, Float)]): Float =
list
.iterator // mapping the iterator to avoid building an intermediate List instance
.map(_._3) // get the distance Float from the tuple
.sum // built-in method for collections of Numeric elements (e.g. Float)
然后像这样打印输出:
def summarize(routes: Map[String, List[(Int, String, Float)]]): Unit =
for { (name, stops) <- routes } {
val numStops = stops.size
val distance = getDistance(stops)
println(s"$name has $numStops stops and total distance of $distance km")
}
如果您真的想通过 foldLeft
计算 numStops
和 distance
,Luis 对您问题的评论就是实现此目的的方法。
编辑 - 根据 Luis 的要求,将他的评论放在这里并稍微清理一下:
stops.foldLeft(0 -> 0.0f) {
// note: "acc" is short for "accumulated"
case ((accCount, accDistance), (_, _, distance)) =>
(accCount + 1) -> (accDistance + distance)
}
我需要计算 Map 中整数和浮点数的数量,类似于 Map[String, List[(Int, String, Float)]]
数据来自读取文件 - 例如里面的数据看起来有点像(但是还有一些路由):
Cycle Route (City),1:City Centre :0.75f,2:Main Park :3.8f,3:Central Station:2.7f,4:Modern Art Museum,5:Garden Centre:2.4f,6:Music Centre:3.4f
地图被拆分,字符串是路线名称,列表是其余数据。
我希望它计算每条路线的 'checkpoints' 数量和每条路线的总距离(即浮点数)然后打印出来,例如Oor Wullie Route有6个检查站,总距离18.45km
我想我需要使用 foldLeft
但是我不确定该怎么做?
我以前做过但不确定如何将其应用于上述情况的简单折叠示例?
val list1 = List.range(1,20)
def sum(ls:List[Int]):Int = {
ls.foldLeft(0) { _ + _}
}
你可以弃牌,但我认为这是不必要的。
只需计算列表的大小即可知道检查点的数量(假设列表中的每个条目都是一个检查点)。
要计算总距离,您可以这样做:
def getDistance(list: List[(Int, String, Float)]): Float =
list
.iterator // mapping the iterator to avoid building an intermediate List instance
.map(_._3) // get the distance Float from the tuple
.sum // built-in method for collections of Numeric elements (e.g. Float)
然后像这样打印输出:
def summarize(routes: Map[String, List[(Int, String, Float)]]): Unit =
for { (name, stops) <- routes } {
val numStops = stops.size
val distance = getDistance(stops)
println(s"$name has $numStops stops and total distance of $distance km")
}
如果您真的想通过 foldLeft
计算 numStops
和 distance
,Luis 对您问题的评论就是实现此目的的方法。
编辑 - 根据 Luis 的要求,将他的评论放在这里并稍微清理一下:
stops.foldLeft(0 -> 0.0f) {
// note: "acc" is short for "accumulated"
case ((accCount, accDistance), (_, _, distance)) =>
(accCount + 1) -> (accDistance + distance)
}