Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中计算平均值并从列表中删除_Scala_Average - Fatal编程技术网

在Scala中计算平均值并从列表中删除

在Scala中计算平均值并从列表中删除,scala,average,Scala,Average,我在使用Scala的第一周,正在为用这种语言编写代码的方式而挣扎 我试图编写一个函数,确定列表中的平均数,并删除低于该平均数的值。例如: 我有以下清单: List[(String, Int)] = List(("A", 1), ("B", 1), ("C", 3), ("D", 2), ("E", 4)) 结果应该是2.2 因此,该函数还应该删除(“A”,1),(“B”,1)和(“D”,2),因为它们低于平均值 有人能帮我吗?你可以做: val sum = list.map(_._2).sum

我在使用Scala的第一周,正在为用这种语言编写代码的方式而挣扎

我试图编写一个函数,确定列表中的平均数,并删除低于该平均数的值。例如:

我有以下清单:

List[(String, Int)] = List(("A", 1), ("B", 1), ("C", 3), ("D", 2), ("E", 4))
结果应该是
2.2

因此,该函数还应该删除
(“A”,1)
(“B”,1)
(“D”,2)
,因为它们低于平均值

有人能帮我吗?

你可以做:

val sum = list.map(_._2).sum
val avg: Double = sum / list.size.toDouble

val filtered = list.filter(_._2 > avg)
注意这是遍历列表两次,一次用于求和,一次用于过滤。另外需要注意的是Scala
List[T]
是不可变的。过滤时,您正在使用过滤后的数据创建一个新的
列表
对象。

您可以执行以下操作:

val sum = list.map(_._2).sum
val avg: Double = sum / list.size.toDouble

val filtered = list.filter(_._2 > avg)

注意这是遍历列表两次,一次用于求和,一次用于过滤。另外需要注意的是Scala
List[T]
是不可变的。过滤时,您正在使用过滤后的数据创建一个新的
列表
对象。

您可以计算元组列表第二个元素的平均值,您不需要自己求和,因为Scala有一个内置函数。首先,我们需要将元组列表转换为
Int
值列表,我们可以使用
map
函数来实现这一点,如下所示

val average = list.map(_._2).sum/list.size.toDouble
现在你有了平均值,你可以根据它的值过滤你的列表

val newList = list.filter(_._2  < average)
val newList=list.filter(u._2

请注意,我们没有从列表中删除任何内容,我们创建了一个带有过滤元素的新列表

您可以计算元组列表中第二个元素的平均值,您不需要自己求和,因为Scala有一个内置函数。首先,我们需要将元组列表转换为
Int
值列表,我们可以使用
map
函数来实现这一点,如下所示

val average = list.map(_._2).sum/list.size.toDouble
val average = list.map(_._2).sum / list.size.toDouble
list.filter(p => p._2 >= average)
现在你有了平均值,你可以根据它的值过滤你的列表

val newList = list.filter(_._2  < average)
val newList=list.filter(u._2
请注意,我们没有从列表中删除任何内容,而是创建了一个带有筛选元素的新列表

val average = list.map(_._2).sum / list.size.toDouble
list.filter(p => p._2 >= average)
您需要强制转换为
双精度
,否则平均值将强制转换为
整数
,并且不精确。
过滤器
仅使元素大于平均值

您需要强制转换为
双精度
,否则平均值将强制转换为
整数
,并且不精确。
过滤器
仅使元素大于平均值