【问题标题】:Calculate average and remove from list in Scala计算平均值并从Scala中的列表中删除
【发布时间】:2016-05-01 07:52:18
【问题描述】:

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

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

我有这个清单:

List[(String, Int)] = List(("A", 1), ("B", 1), ("C", 3), ("D", 2), ("E", 4))

结果应该是2.2

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

谁能帮帮我?

【问题讨论】:

    标签: scala average


    【解决方案1】:

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

    val average = list.map(_._2).sum/list.size.toDouble
    

    现在你有了平均值,你可以根据它的值过滤你的列表

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

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

    【讨论】:

      【解决方案2】:
      val average = list.map(_._2).sum / list.size.toDouble
      list.filter(p => p._2 >= average)
      

      您需要转换为 Double,否则平均值将转换为 Int 并且不精确。 filter 只保持元素大于平均值。

      【讨论】:

        【解决方案3】:

        你可以这样做:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多